成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > HTML5應用之文件上傳

HTML5應用之文件上傳

熱門標簽:中紳電銷智能機器人 跟電銷機器人做同事 濟南辦理400電話 農(nóng)村住宅地圖標注 鄭州電銷外呼系統(tǒng)違法嗎 漳州人工外呼系統(tǒng)排名 威海營銷外呼系統(tǒng)招商 鶴壁手機自動外呼系統(tǒng)怎么安裝 ai電銷機器人連接網(wǎng)關

長期以來,開發(fā)者們一直為此苦惱,大部分為解決這個問題都采用了flash作為解決方案,但flash并非靈丹妙藥,因為flash版本,割據(jù)造成的問題有時反倒成為了噩夢。有些網(wǎng)站則采用了form標簽的enctype=multipart/form-data屬性,但這一屬性要求服務器作出特殊的設置才能夠顯示進度,而且本身也比較復雜,復雜就意味著容易出現(xiàn)錯誤,這可不是我們想要的。

現(xiàn)在我們來看看Html5為什么能夠解決這個問題,以及,它到底能做的多好。

用HTML5上傳文件

在HTML5標準中,XMLHttpRequest對象被重新定義,被稱為“XMLHttpRequest Level 2”,其中包含了以下5個新特性:

1、支持上傳、下載字節(jié)流,比如文件、blob以及表單數(shù)據(jù)

2、增加了上傳、下載中的進度事件

3、跨域請求的支持

4、允許發(fā)送匿名請求(即不發(fā)送HTTP的Referer部分)

5、允許設置請求的超時

在這篇教程中,我們主要關注第一和第二項特性,尤其是第二項——它能夠提供我們想要的上傳進度。和之前的方案不同,這個方案并不要求服務器作出特殊的設置,因此大家邊看教程就可以邊動手試試了。

上面圖示的就是我們能夠?qū)崿F(xiàn)的內(nèi)容:

1、顯示上傳的文件信息,比如文件名、類型、尺寸

2、一個能夠顯示真實進度的進度條

3、上傳的速度

4、剩余時間的估算

5、已上傳的數(shù)據(jù)量

6、上傳結(jié)束后服務器返回的響應

另外,憑借XMLHttpRequest,我們的上傳過程整個都是異步的,因此用戶在上傳文件的時候,依然可以操作網(wǎng)頁當中的其它元素,并不需要專門等待上傳的完成。而在上傳結(jié)束后,我們能夠獲取服務器發(fā)回的響應,因此整個上傳過程都顯得相當順理成章。

HTML5的進度事件

HTML5當中新增了一個進度事件(Progress Events),這個事件為我們提供了以下信息:

1、total – 文件大小

2、loaded – 已上傳的大小

3、lengthComputable – 進度是否可計算

信息并不多,但是在計算文件進度上已經(jīng)足夠了。當然,也還有很多東西它沒有直接給出,這非常遺憾。

HTML

與普通的文件上傳代碼并沒有太大差異。不過注意,input標簽關聯(lián)了一個JavaScript函數(shù)在onchange上。

 <!DOCTYPE html>
<html>
<head>
    <title>使用XMLHttpRequest上傳文件</title>
</head>
<body>
<form id="form1" enctype="multipart/form-data" method="post" action="upload.php">
<div class="row">
      <label for="fileToUpload">Select a File to Upload</label>
<input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/>
    </div>
<div id="fileName"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<div class="row">
<input type="button" onclick="uploadFile()" value="Upload" />
    </div>
<div id="progressNumber"></div>
</form>

</body>
</html>

JavaScript

一旦我們在HTML中使用了input,我們就可以在JS代碼中獲取到一個FileList對象。這個對象是HTML5中新增加的文件API中的一部分,每一個FileList對象都是一組文件對象的集合,而文件對象則擁有下列的屬性:

1、name – 文件名(不包含路徑)

2、type – 文件的MIME類型(小寫)

3、size – 文件的尺寸(單位為字節(jié))

這正是我們所需要的。當然,HTML5中還有一個FileReader對象,但在這里我們并沒有用它?,F(xiàn)在,通過上面的三個內(nèi)容,我們已經(jīng)能夠控制用戶上傳的文件大小和文件類型,以便減輕服務器再次檢測時的壓力,并提升安全系數(shù)。

 function fileSelected() {
  var file = document.getElementById('fileToUpload').files[0];
  if (file) {
    var fileSize = 0;
    if (file.size > 1024 * 1024)
      fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
    else
      fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';

    document.getElementById('fileName').innerHTML = 'Name: ' + file.name;
    document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize;
    document.getElementById('fileType').innerHTML = 'Type: ' + file.type;
  }
}

那么當用戶選擇好文件,點擊上傳之后,又將發(fā)生什么呢?

 function uploadFile() {
  var xhr = new XMLHttpRequest();
  var fd = document.getElementById('form1').getFormData();

  /* event listners */
  xhr.upload.addEventListener("progress", uploadProgress, false);
  xhr.addEventListener("load", uploadComplete, false);
  xhr.addEventListener("error", uploadFailed, false);
  xhr.addEventListener("abort", uploadCanceled, false);
  /* Be sure to change the url below to the url of your upload server side script */
  xhr.open("POST", "upload.php");
  xhr.send(fd);
}

function uploadProgress(evt) {
  if (evt.lengthComputable) {
    var percentComplete = Math.round(evt.loaded * 100 / evt.total);
    document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
  }
  else {
    document.getElementById('progressNumber').innerHTML = 'unable to compute';
  }
}

function uploadComplete(evt) {
  /* This event is raised when the server send back a response */
  alert(evt.target.responseText);
}

function uploadFailed(evt) {
  alert("There was an error attempting to upload the file.");
}

function uploadCanceled(evt) {
  alert("The upload has been canceled by the user or the browser dropped the connection.");
}

在代碼的第二行中,我們的JS代碼又使用了另一個HTML5推出的新對象——FormData。FormData對象是用戶的表單數(shù)據(jù)的集合,它以鍵值對的形式存儲了表單數(shù)據(jù),其值能夠包括數(shù)字、字符串以及文件。我們通過輾轉(zhuǎn)這個對象,來向服務器提交數(shù)據(jù)。

當然,這個對象我們也可以在代碼中手工構(gòu)建,比如說像下面這樣:

var fd = new FormData();
fd.append("author", "Shiv Kumar");
fd.append("name", "Html 5 File API/FormData");
fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);

回到正題?;仡櫳弦欢未a,我們增加了許多有關XMLHttpRequest的事件監(jiān)聽,其目的是為了獲取文件上傳的真實情況。尤其需要注意的是,我們所掛鉤的,并不是XMLHttpRequest本身,而是其屬性,比如uploadProgress。

完整代碼

最后,來看看完整的代碼。

 <!DOCTYPE html>
<html>
<head>
    <title>Upload Files using XMLHttpRequest - Minimal</title>

    <script type="text/javascript">
      function fileSelected() {
        var file = document.getElementById('fileToUpload').files[0];
        if (file) {
          var fileSize = 0;
          if (file.size > 1024 * 1024)
            fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
          else
            fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';

          document.getElementById('fileName').innerHTML = 'Name: ' + file.name;
          document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize;
          document.getElementById('fileType').innerHTML = 'Type: ' + file.type;
        }
      }

      function uploadFile() {
        var fd = new FormData();
        fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
        var xhr = new XMLHttpRequest();
        xhr.upload.addEventListener("progress", uploadProgress, false);
        xhr.addEventListener("load", uploadComplete, false);
        xhr.addEventListener("error", uploadFailed, false);
        xhr.addEventListener("abort", uploadCanceled, false);
        xhr.open("POST", "UploadMinimal.aspx");
        xhr.send(fd);
      }

      function uploadProgress(evt) {
        if (evt.lengthComputable) {
          var percentComplete = Math.round(evt.loaded * 100 / evt.total);
          document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
        }
        else {
          document.getElementById('progressNumber').innerHTML = 'unable to compute';
        }
      }

      function uploadComplete(evt) {
        /* This event is raised when the server send back a response */
        alert(evt.target.responseText);
      }

      function uploadFailed(evt) {
        alert("There was an error attempting to upload the file.");
      }

      function uploadCanceled(evt) {
        alert("The upload has been canceled by the user or the browser dropped the connection.");
      }
    </script>
</head>
<body>
<form id="form1" enctype="multipart/form-data" method="post" action="upload.php">
<div class="row">
      <label for="fileToUpload">Select a File to Upload</label>
<input type="file" name="fileToUpload" id="fileToUpload" onchange="fileSelected();"/>
    </div>
<div id="fileName"></div>
<div id="fileSize"></div>
<div id="fileType"></div>
<div class="row">
<input type="button" onclick="uploadFile()" value="Upload" />
    </div>
<div id="progressNumber"></div>
</form>

</body>
</html>

我們的任務完成了嗎?可以說完成了,因為這段代碼已經(jīng)能夠完成上傳文件的任務,而且也能夠顯示上傳的進度;但是理應說我們沒有,因為除了這個骨架HTML之外,我們還有很多沒有做的事情,比如CSS的美化等等。不過這就不是我們這篇文章的主題了。

最后,提醒一下,教程的代碼應當在支持新特性的瀏覽器之上運行,如果你不清楚自己的瀏覽器是否支持,可以在這里查詢。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:甘南 萍鄉(xiāng) 咸陽 惠州 紅河 文山 營口 蘇州

巨人網(wǎng)絡通訊聲明:本文標題《HTML5應用之文件上傳》,本文關鍵詞  HTML5,應,用之,文件,上傳,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5應用之文件上傳》相關的同類信息!
  • 本頁收集關于HTML5應用之文件上傳的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    中文字幕不卡一区| 亚洲另类色综合网站| 337p日本欧洲亚洲大胆鲁鲁| 黄色片久久久久| 日本熟妇人妻xxxxx| 亚洲综合网站久久久| 91精品网站在线观看| 亚洲一区二区自拍| 成人网视频在线观看| 欧美综合在线视频| 青青草视频在线青草免费观看| 亚洲欧美色视频| 四季av一区二区| 曰韩少妇与小伙激情| 久草在线看片| 国内外成人免费激情在线视频| 免费毛片在线播放| 成人开心激情| 亚洲精品视频观看| 男女啪啪免费观看| yellow网站在线观看| 亚洲色图网站| 日韩一区二区三区免费播放| 91一区二区在线观看| 国产精品久久久久久久久免费丝袜| 欧美日韩午夜爽爽| 国产精品热久久久久夜色精品三区| 欧美日韩高清一区二区| 亚州精品视频| 久草青青在线观看| 亚洲无线码一区二区三区| 台湾无码一区二区| 宅男在线观看免费高清网站| 精品伦理一区二区三区| 亚洲精品一区| 国产欧美一区二区在线| 国产精品乱人伦| 99精品美女| 老司机午夜性大片| 中文天堂资源在线| 中文字幕永久免费| 国产女主播喷水视频在线观看| www成人免费观看网站| 亚洲高清视频中文字幕| 久久久久亚洲av无码专区| 91www在线| 波多野结衣亚洲一区| 国产盗摄在线观看| 老司机免费视频一区二区| 久久亚洲综合国产精品99麻豆精品福利| 亚洲美女啪啪| av大片在线播放| 开心丁香婷婷深爱五月| 中文字幕理伦片免费看| 中文有码在线观看| 免费看男女www网站入口在线| 日韩欧美激情四射| 孩娇小videos精品| 亚洲男人天堂视频| 人妻 日韩 欧美 综合 制服| 中文字幕国产专区| 成人精品gif动图一区| 99这里有精品视频| 在线人成日本视频| 国产自产女人91一区在线观看| 一本色道久久综合狠狠躁的番外| 亚洲线精品一区二区三区| 色琪琪一区二区三区亚洲区| 婷婷激情成人| 丁香啪啪综合成人亚洲| 99成人精品视频| 四虎国产精品永久在线国在线| 性生生活大片免费看视频| 99久久精品免费看| 妺妺窝人体色www在线小说| 国产性70yerg老太| 亚洲成熟少妇视频在线观看| av片在线观看免费| a级免费观看| 国产在线精品一区二区不卡了| 欧美色图一区二区| 亚洲欧洲另类| 亚洲欧美大片| 三级在线电影| 国产精品久久久久久久久久久久冷| 最新av电影网站| 国产精品一国产精品最新章节| 欧美专区在线观看一区| 国产日韩视频一区| 久久久久久国产精品免费免费| 欧美aa国产视频| 亚洲欧美国产日韩中文字幕| 亚洲第一页综合| 97影院秋霞午夜在线观看| 亚洲伊人成人网| 国产九色porny| 中文字幕精品三区| 国产黄色麻豆视频| 九九久久成人| 国产剧情在线观看一区二区| 午夜视频www| 国产精品无码久久久久久| 中文字幕日韩一区二区| 日韩毛片在线一区二区毛片| 自拍偷拍在线视频| 一级毛片精品毛片| 精品51国产黑色丝袜高跟鞋| 黄色网页在线免费看| 一区二区三区欧美在线观看| 国产四区在线观看| 91偷拍与自偷拍精品| 99热99re6国产在线播放| 欧美性生活一级| 欧美日韩国产丝袜美女| 免费91视频| 日韩黄色大片| 欧美日韩亚洲一区二区三区在线观看| 欧美日韩五码| 国产福利在线视频| 日日骚一区二区网站| 中文字幕在线字幕中文| 精品久久久久久中文字幕人妻最新| 日韩综合另类| 欧美成人tv| 成人在线视频网址| 亚洲激精日韩激精欧美精品| 厕沟全景美女厕沟精品| 中文字幕av影视| 国产精品蜜臀| 高清久久一区| 狠狠色综合播放一区二区| 日本一区二区高清视频| 美国av在线播放| www.天天操| 亚洲免费黄色网址| 亚洲一区二区三区四区中文| 日韩一卡二卡在线| 欧美日韩性生活视频| 黄色国产网站在线观看| 九九热在线观看视频| 亚洲欧洲日本韩国| wwww.国产| 粉嫩av一区二区三区| 日日夜夜亚洲精品| 欧美精品久久久久久久免费| 日韩免费成人网| 丰满女人性猛交| 一区二区在线看| 999久久欧美人妻一区二区| 久久久久久久久久久网| 涩涩屋黄网站| 中文字幕精品一区二区精| 国产成人免费看一级大黄| 亚洲国产合集| 国产欧美成人xxx视频| 欧美日韩在线观看不卡| 另类色图亚洲色图| 成人在线免费视频观看| 精品美女被调教视频大全网站| 91国产视频在线播放| 中文字幕黄色片| 欧美激情一区二区视频| 久久爱一区二区| 麻豆成人久久精品二区三区小说| 91超碰caoporn97人人| 一区二区电影在线观看| 国产区二精品视| 国产精品最新在线观看| 国产又爽又黄视频| 精品国产乱码久久久久久久软件| 久久爱另类一区二区小说| 视频在线国产| 天天射夜夜骑| 日本中文字幕精品—区二区| 国产精品扒开腿做爽爽爽的视频| 国产视频一视频二| 亚洲高清一区二| 亚洲熟女一区二区三区| 亚洲五码在线| 亚洲精品无遮挡| 毛片在线播放网站| 欧美中文字幕在线观看视频| 国产欧美日韩免费观看| 色婷婷综合网站| 久久一区精品| 亚洲夂夂婷婷色拍ww47| 在线观看日本中文字幕| 久草在线新免费首页资源站| 亚洲精品在线观看91| 国产一区二区三区av电影| 亚洲国产一区二区在线播放| 91精品国产综合久久香蕉麻豆| 日韩一区二区三区不卡视频| 国产一区二区视频在线观看免费| 亚洲欧洲精品一区| 国产乱人伦偷精品视频不卡| 亚洲一级一区| 国产成人精品视频在线观看| αv一区二区三区| 成人午夜碰碰视频| 岳乳丰满一区二区三区| 一区二区日韩欧美| 中文字幕在线直播| yw.尤物在线精品视频| 国产成人无码专区| 欧美一区在线看| 91theporn国产在线观看| 大吊一区二区三区| 久久久久免费网| 欧美hentaied在线观看| 久久久综合色| 69影院欧美专区视频| 国产一区二区在线视频播放| 欧美午夜激情在线| 色老汉av一区二区三区| 黄色亚洲网站| 久久精品日产第一区二区三区高清版| yellow视频在线观看一区二区| 日韩国产在线看| 国产成人免费9x9x人网站视频| 尤物九九久久国产精品的特点| 久久国产欧美| 国产亚洲精品精华液| 黑人巨大精品欧美黑白配亚洲| 亚洲午夜久久久久久久国产| 亚洲在线视频网站| 在线欧美小视频| 99久久久无码国产精品免费| 久草在线视频精品| 黄色大片中文字幕| 午夜爽爽爽男女免费观看影院| 日本国产精品| 成人性生生活性生交12| 综合久久一区二区三区| 俄罗斯精品一区二区| 日本片在线看| 免费裸体视频网站| 少妇精品久久久一区二区| 在线亚洲欧美专区二区| 51一区二区三区| 国产精品第五页| 李宗瑞系列合集久久| 91精品国产色综合久久不8| 国产99久久精品| 日本人添下边视频免费| 亚洲先锋影音| 欧美壮男野外gaytube| 69免费视频| 欧美国产日韩一区| 日韩激情免费| 国产三级午夜理伦三级| 成人毛片在线观看| 久热久热免费视频中文字幕777| 我不卡伦不卡影院| 91中文字幕一区| 亚洲无线码一区二区三区| 久草中文在线| 欧美亚洲视频在线看网址| 久久国产精品免费一区| 久久影院视频免费| 国产美女激情视频| 久热国产在线| 国产精选一区二区三区| 久久精品五月天| 明星裸体视频一区二区| 欧美高清www午色夜在线视频| 欧美a级理论片| 久久精品色妇熟妇丰满人妻| 日本肉体xxxx裸体xxx免费| 91精品久久久久久久久中文字幕| 成人黄色片视频| 亚洲精品久久久一区二区三区| 91精品啪在线观看国产| 麻豆精品精品国产自在97香蕉| 欧美在线性爱视频| av影片在线一区| 国产成人生活片| 亚洲视频在线观看三级| 多人啪嗒啪嗒在线观看免费| 你懂的视频在线播放| yiren22综合网成人| 中文字幕激情视频| 婷婷久久综合九色综合99蜜桃| 日日噜噜噜噜人人爽亚洲精品| 日韩系列欧美系列| 91污色多多| 日本精品一级二级| 欧美视频免费看欧美视频| 青草青草久热精品视频在线观看| 亚洲精品观看| 四虎影视2018在线播放alocalhost| 亚洲第一视频网| 亚洲成色www久久网站| 性网站在线播放| 3atv在线一区二区三区| 国产午夜亚洲精品羞羞网站| 图片区 小说区 区 亚洲五月| 美女扒开内裤让男人桶| 久久免费高清| 久久久免费av| 久久久久久久久91| 牲欧美videos精品| 午夜大片在线观看| 91久久国产婷婷一区二区| 日韩中文字幕一区二区| 欧美一级xxx| 国产二级一片内射视频播放| 成熟人妻av无码专区| 日韩精品免费在线播放| 色一情一乱一区二区三区| 欧美夫妻性视频| 91黄色免费版| 欧美综合激情网| 成人国产精选| 青青青国产在线视频| 亚洲成人高清| 国产中文字幕久久| 影音先锋男人在线资源| 日韩精品中文字幕一区二区| 狠狠88综合久久久久综合网| 国产精国产精品| 亚洲电影av| xxxx欧美18另类的高清| 男女做爰猛烈刺激| 成年免费插网| 上原亚衣av一区二区三区| 国产日韩欧美日韩| 人人做人人澡人人爽欧美|