一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Ajax方式上傳文件

 Tornador 2015-08-24

 用到兩個(gè)對(duì)象

第一個(gè)對(duì)象:FormData

第二個(gè)對(duì)象:XMLHttpRequest

目前新版的Firefox 與 Chrome 等支持HTML5的瀏覽器完美的支持這兩個(gè)對(duì)象,但I(xiàn)E9尚未支持 FormData 對(duì)象,還在用IE6 ? 只能仰天長(zhǎng)嘆....

有了這兩個(gè)對(duì)象,我們可以真正的實(shí)現(xiàn)Ajax方式上傳文件。

示例代碼:


 

<!DOCTYPE html>

<html>

<head>

    <title>Html5 Ajax 上傳文件</title>

    <script type="text/javascript">


        function UpladFile() {


            var fileObj = document.getElementByIdx_x_x("file").files[0]; // 獲取文件對(duì)象

            var FileController = "../file/save";                    // 接收上傳文件的后臺(tái)地址 

           

            // FormData 對(duì)象

            var form = new FormData();

            form.append("author", "hooyes");                        // 可以增加表單數(shù)據(jù)

            form.append("file", fileObj);                           // 文件對(duì)象


            // XMLHttpRequest 對(duì)象

            var xhr = new XMLHttpRequest();

            xhr.open("post", FileController, true);

            xhr.onload = function () {

                alert("上傳完成!");

            };

            xhr.send(form);


        }

</script>

</head>

<body>

<input type="file" id="file" name="myfile" />

<input type="button" onclick="UpladFile()" value="上傳" />

</body>

</html>


 

很簡(jiǎn)潔的代碼,便可以達(dá)到Ajax方式上傳文件,上面的代碼中使用<input type="file" />這種傳統(tǒng)的選擇文件的方法產(chǎn)生文件對(duì)象,HTML5還支持使用多種更靈活的方式,如拖拽文件到指定的元素上產(chǎn)生。

Ajax已成功上傳文件,但這時(shí)我們會(huì)想到一個(gè)問題,如何顯示進(jìn)度條?帶著這個(gè)問題,腦子會(huì)想到,F(xiàn)lash? 瀏覽器插件?。

NO,現(xiàn)在不需要這些東西了。

開始著手,先做一個(gè)進(jìn)度條,進(jìn)度條也很簡(jiǎn)單,使用HTML5 新加的標(biāo)簽:

    <progress id="progressBar" value="0" max="100">
    </progress>

這個(gè)在瀏覽器中便會(huì)呈現(xiàn)了一個(gè)進(jìn)度條,現(xiàn)在我們要做的就是在上傳的時(shí)候,實(shí)時(shí)的去改變它的Value值,然后進(jìn)度顯示的問題便交給它了。

我們的服務(wù)器端無需修改,只需要在JS中XHR對(duì)象加一個(gè)事件。

xhr.upload.addEventListener("progress", progressFunction, false)


progressFunction 被調(diào)用的時(shí)候會(huì)傳進(jìn)一個(gè)事件對(duì)象,這個(gè)對(duì)象有兩個(gè)屬性,一個(gè)就是loaded 一個(gè)是total ,分別代表,已上傳的值,和總要上傳的值。

這正是我們需要的,所以這個(gè)方法,可以這樣寫:


 

function progressFunction(evt) {

            var progressBar = document.getElementByIdx_x_x("progressBar");

            if (evt.lengthComputable) {

                progressBar.max = evt.total;      

                progressBar.value = evt.loaded;

               

            }

        }


 

這樣便可以完成,上傳進(jìn)度顯示了。

如下針對(duì)上面的第一個(gè)示例代碼,做一個(gè)調(diào)整:

示例代碼2,帶進(jìn)度顯示:


 

<!DOCTYPE html>

<html>

<head>

    <title>Html5 Ajax 上傳文件</title>

    <script type="text/javascript">

        function UpladFile() {

            var fileObj = document.getElementByIdx_x_x("file").files[0]; // js 獲取文件對(duì)象

            var FileController = "../file/save";                    // 接收上傳文件的后臺(tái)地址 


            // FormData 對(duì)象

            var form = new FormData();

            form.append("author", "hooyes");                        // 可以增加表單數(shù)據(jù)

            form.append("file", fileObj);                           // 文件對(duì)象


            // XMLHttpRequest 對(duì)象

            var xhr = new XMLHttpRequest();

            xhr.open("post", FileController, true);

            xhr.onload = function () {

               // alert("上傳完成!");

            };

            xhr.upload.addEventListener("progress", progressFunction, false);

            

            xhr.send(form);


        }

        function progressFunction(evt) {

            var progressBar = document.getElementByIdx_x_x("progressBar");

            var percentageDiv = document.getElementByIdx_x_x("percentage");

            if (evt.lengthComputable) {

                progressBar.max = evt.total;

                progressBar.value = evt.loaded;

                percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";

            }

        }  

    </script>

</head>

<body>

    <progress id="progressBar" value="0" max="100">

    </progress>

    <span id="percentage"></span>

    <br />

    <input type="file" id="file" name="myfile" />

    <input type="button" onclick="UpladFile()" value="上傳" />

</body>

</html>


 

后臺(tái)接收文件的程序可以是任何語言(C#,PHP,Python 等)編寫的,上述例子使用C#

很簡(jiǎn)單,無需為這個(gè)進(jìn)度條做任何改動(dòng)。


 

var flist = Request.Files;


            for (int i = 0; i < flist.Count; i++)

            {

                string FilePath = "E:\\hooyes\\Files\\";

                var c = flist[i];

                FilePath = Path.Combine(FilePath, c.FileName);

                c.SaveAs(FilePath);

            }

 

 

 

 

 

  

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    欧美午夜一级特黄大片| 99热在线精品视频观看| 99久久精品午夜一区| 国产av一二三区在线观看| 色欧美一区二区三区在线| 中文字幕一区二区免费| 国产又粗又深又猛又爽又黄| 成人精品欧美一级乱黄| 国内精品伊人久久久av高清| 亚洲日本久久国产精品久久| 麻豆精品在线一区二区三区| 国产又粗又爽又猛又黄的| 午夜福利92在线观看| 又黄又硬又爽又色的视频| 日本人妻熟女一区二区三区| 好吊日视频这里都是精品| 最新午夜福利视频偷拍| 日本一区不卡在线观看| 在线欧洲免费无线码二区免费 | 人妻精品一区二区三区视频免精| 欧美一区二区三区五月婷婷| 色偷偷偷拍视频在线观看| 中文字幕欧美视频二区| 99久久免费看国产精品| 欧美视频在线观看一区| 亚洲综合色婷婷七月丁香| 日本人妻免费一区二区三区| 五月婷婷综合激情啪啪| 亚洲夫妻性生活免费视频| 亚洲精品福利视频你懂的| 亚洲国产性生活高潮免费视频 | 熟女中文字幕一区二区三区| 精品视频一区二区三区不卡| 午夜精品一区免费视频| 午夜福利黄片免费观看| 欧美日韩亚洲综合国产人| 日韩精品毛片视频免费看 | 女生更色还是男生更色| 美女被后入视频在线观看| 美女黄片大全在线观看| 精品日韩中文字幕视频在线|