中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

利用HTML5分片上傳超大文件
來源:易賢網 閱讀:1496 次 日期:2015-04-29 14:36:43
溫馨提示:易賢網小編為您整理了“利用HTML5分片上傳超大文件”,方便廣大網友查閱!

在網頁中直接上傳大文件一直是個比較頭疼的問題,主要面臨的問題一般包括兩類:一是上傳時間長中途一旦出錯會導致前功盡棄;二是服務端配置復雜,要考慮接收超大表單和超時問題,如果是托管主機沒準還改不了配置,默認只能接收小于4MB的附件。

比較理想的方案是能夠把大文件分片,一片一片的傳到服務端,再由服務端合并。這么做的好處在于一旦上傳失敗只是損失一個分片而已,不用整個文件重傳,而且每個分片的大小可以控制在4MB以內,服務端不用做任何設置就可適應。

常用的解決方案是RIA,以flex為例,通常是利用FileReference.load方法加載文件得到ByteArray,然后分片構造表單(flash的高版本不允許直接訪問文件)。不過這個load方法只能加載較小的文件,大約不超過300MB,因此適用性不是很強。

好在現在有了HTML5,我們可以直接構造分片了,這是一個非常喜人的進步,只可惜目前適用面不廣(IE啊IE,真是恨你恨得牙癢癢)。

言歸正傳,來看一個DEMO吧,基于ASP.Net MVC3,只是示例,很多問題做了簡化處理。

主要是客戶端,新特性都體現在這里:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<!DOCTYPE html>

<html lang="zh-CN">

<head>

<meta charset="utf-8">

<title>HTML5大文件分片上傳示例</title>

<script src="../Scripts/jquery-1.11.1.min.js"></script>

<script>

var page = {

init: function(){

$("#upload").click($.proxy(this.upload, this));

},

upload: function(){

var file = $("#file")[0].files[0], //文件對象

name = file.name, //文件名

size = file.size, //總大小

succeed = 0;

var shardSize = 2 * 1024 * 1024, //以2MB為一個分片

shardCount = Math.ceil(size / shardSize); //總片數

for(var i = 0;i < shardCount;++i){

//計算每一片的起始與結束位置

var start = i * shardSize,

end = Math.min(size, start + shardSize);

//構造一個表單,FormData是HTML5新增的

var form = new FormData();

form.append("data", file.slice(start,end)); //slice方法用于切出文件的一部分

form.append("name", name);

form.append("total", shardCount); //總片數

form.append("index", i + 1); //當前是第幾片

//Ajax提交

$.ajax({

url: "../File/Upload",

type: "POST",

data: form,

async: true, //異步

processData: false, //很重要,告訴jquery不要對form進行處理

contentType: false, //很重要,指定為false才能形成正確的Content-Type

success: function(){

++succeed;

$("#output").text(succeed + " / " + shardCount);

}

});

}

}

};

$(function(){

page.init();

});

</script>

</head>

<body>

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

<button id="upload">上傳</button>

<span id="output" style="font-size:12px">等待</span>

</body>

</html>

這里的slice方法和FormData都是html5之前不存在的。通過這樣的方法,我們的表單構造出來是這樣的,抓包看看:

利用HTML5分片上傳超大文件

可以看到構造出來的Content-Type是multipart/form-data,也就是符合RFC標準的那個最傳統的文件上傳表單。另外我們同時傳輸的name、total等屬性也都在表單里。

然后是服務端,沒什么新鮮的,完全是在接收一個普通的文件:

[HttpPost]

public ActionResult Upload()

{

//從Request中取參數,注意上傳的文件在Requst.Files中

string name = Request["name"];

int total = Convert.ToInt32(Request["total"]);

int index = Convert.ToInt32(Request["index"]);

var data = Request.Files["data"];

//保存一個分片到磁盤上

string dir = Server.MapPath("~/Upload");

string file = Path.Combine(dir, name + "_" + index);

data.SaveAs(file);

//如果已經是最后一個分片,組合

//當然你也可以用其它方法比如接收每個分片時直接寫到最終文件的相應位置上,但要控制好并發防止文件鎖沖突

if(index == total)

{

file = Path.Combine(dir, name);

var fs = new FileStream(file, FileMode.Create);

for(int i = 1;i <= total;++i)

{

string part = Path.Combine(dir, name + "_" + i);

var bytes = System.IO.File.ReadAllBytes(part);

fs.Write(bytes, 0, bytes.Length);

bytes = null;

System.IO.File.Delete(part);

}

fs.Close();

}

//返回是否成功,此處做了簡化處理

return Json(new { Error = 0 });

}

上面的DEMO很多問題是簡化處理的,比如沒做什么異常處理,客戶端也沒有判斷服務端是否出錯重試一類的,各位可以自己完善。

在上面的基礎上,我們可以做很多功能上的擴展,比如我們可以控制所有分片是順序上傳還是并發上傳,以適用不同應用。再比如我們可以在整體文件上傳前以及分片上傳前都先計算一下相應的HASH,發個請求詢問服務器文件是否已存在,如果存在就不要重復上傳了,這樣就實現了“極速上傳”以及“斷點續傳”。

更多信息請查看IT技術專欄

更多信息請查看網頁制作
下一篇:HTML5數組方法
易賢網手機網站地址:利用HTML5分片上傳超大文件
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
99国产成+人+综合+亚洲欧美| 校园春色国产精品| 午夜精品在线| 欧美一乱一性一交一视频| 亚洲在线观看视频| 亚洲欧美春色| 久久精品免费看| 欧美暴力喷水在线| 欧美日韩精品在线观看| 国产精品久久亚洲7777| 国产伦精品一区二区三区照片91| 免费视频久久| 国产精品v欧美精品v日韩精品| 欧美日韩免费一区二区三区视频| 国产精品成人一区二区三区夜夜夜| 国产精品视频专区| 亚洲韩国青草视频| 亚洲一区久久久| 久久人人超碰| 欧美大尺度在线| 国产精品欧美久久| 亚洲高清在线| 亚洲美女中文字幕| 亚洲女人天堂成人av在线| 久久一区亚洲| 国产欧美日韩一区| 亚洲已满18点击进入久久| 欧美日韩精品久久久| 亚洲国产99| 牛牛精品成人免费视频| 在线精品国精品国产尤物884a| 午夜视频一区二区| 欧美性做爰毛片| 亚洲午夜羞羞片| 国产精品国产三级国产专播精品人| 91久久精品日日躁夜夜躁欧美 | 国产精品久久久久久久9999| 噜噜噜在线观看免费视频日韩| 另类激情亚洲| 国产日韩欧美一区二区三区四区 | 国产精品激情电影| 国产综合激情| 亚洲片国产一区一级在线观看| 亚洲天堂av高清| 欧美国产一区二区在线观看| 国产一区二区毛片| 久久久久国产精品一区二区| 国产乱码精品一区二区三区不卡 | 国产精品卡一卡二| 午夜亚洲福利| 欧美成人久久| 欧美一区二区国产| 亚洲一区二区在线看| 久久日韩粉嫩一区二区三区| 国产视频精品va久久久久久| 久久免费精品日本久久中文字幕| 在线播放豆国产99亚洲| 欧美精品日韩综合在线| 亚洲——在线| 国内精品久久久久久影视8 | 久久久噜噜噜久噜久久 | 久久久精品午夜少妇| 免费成人美女女| 亚洲欧美日本另类| 国产亚洲一区二区精品| 99精品视频网| 国产免费观看久久| 欧美韩国一区| 午夜精品久久久久久久久久久久久| 国内精品嫩模av私拍在线观看| 欧美a级在线| 亚洲欧美日韩在线| 亚洲黄页视频免费观看| 欧美一区二区三区免费看| 欧美va天堂va视频va在线| 一区二区三区精品视频| 亚洲国产一区视频| 先锋亚洲精品| 久久久噜噜噜久久人人看| 久久天天狠狠| 亚洲视频电影在线| 影音先锋在线一区| 国产精品美女xx| 欧美精品一区二区高清在线观看| 午夜视频在线观看一区二区三区| 亚洲国产综合91精品麻豆| 国产欧美一区二区三区在线老狼| 欧美日韩www| 男人的天堂亚洲在线| 久久黄金**| 久久精品国产第一区二区三区| 亚洲图片自拍偷拍| 亚洲精品国产拍免费91在线| 另类图片综合电影| 久久国内精品自在自线400部| 国产精品igao视频网网址不卡日韩| 在线免费不卡视频| 日韩视频一区二区三区在线播放免费观看 | 亚洲福利一区| 国产精品视频免费观看| 欧美伦理91| 欧美色视频日本高清在线观看| 欧美ed2k| 国产精品色婷婷| 91久久久亚洲精品| 一区二区三区精品久久久| 亚洲一区三区视频在线观看| 亚洲视频欧洲视频| 久久久噜噜噜久噜久久| 另类欧美日韩国产在线| 国产精品影音先锋| 在线午夜精品自拍| 性欧美大战久久久久久久免费观看| 亚洲综合色激情五月| 亚洲视频在线播放| 欧美一级大片在线观看| 亚洲欧美日韩一区二区在线| 亚洲美女毛片| 影音先锋一区| 激情综合在线| 久久久噜噜噜久久久| 久久精品一级爱片| 欧美高清在线精品一区| 欧美日韩国产限制| 国产精品视频不卡| 国产一区二区三区久久悠悠色av | 久久久成人精品| 久久视频一区二区| 国产原创一区二区| 欧美一区观看| 在线观看日韩| 欧美黄色片免费观看| 亚洲激情婷婷| 欧美区视频在线观看| 亚洲欧美综合| 国产精品专区h在线观看| 午夜精品国产| 禁久久精品乱码| 欧美成人精品在线播放| 亚洲人成免费| 国产欧美日韩亚洲一区二区三区| 免费高清在线一区| 亚洲视频在线观看免费| 国产一区视频网站| 欧美人妖另类| 久久福利毛片| 亚洲小视频在线观看| 国产在线精品二区| 欧美日韩四区| 久久激情视频| 亚洲欧美激情四射在线日 | 国产精品最新自拍| 亚洲天堂男人| 久久亚洲精品视频| 一区二区三区四区精品| 久久gogo国模啪啪人体图| 欧美日韩在线视频一区| 性一交一乱一区二区洋洋av| 一本久久a久久精品亚洲| 久久亚洲不卡| 日韩午夜激情| 久久久久久伊人| 欧美亚洲成人免费| 亚洲人成网在线播放| 久久9热精品视频| 国产精品萝li| 亚洲专区一区| 国产精品国产三级国产普通话99 | 亚洲欧美日韩高清| 亚洲视频专区在线| 亚洲久久视频| 亚洲第一伊人| 一区二区亚洲| 国产伦精品一区二区三区在线观看 | 在线免费观看成人网| 欧美片第一页| 欧美日韩国产成人在线| 欧美大秀在线观看| 欧美视频网址| 国产综合色产在线精品| 激情伊人五月天久久综合| 国产一区二区三区四区三区四| 国产欧美日韩精品a在线观看| 国产在线播放一区二区三区| 国产区日韩欧美| 亚洲一区二区三区涩| 久久成人一区| 国产一区二区三区久久精品| 亚洲国产高清在线观看视频| 欧美视频在线观看一区二区| 另类成人小视频在线| 中国亚洲黄色| 一本色道久久88综合亚洲精品ⅰ | 国产午夜精品视频免费不卡69堂| 一区二区国产精品| 欧美日韩精品一本二本三本| 亚洲视频欧洲视频| 狠狠久久亚洲欧美| 欧美+亚洲+精品+三区| 一本色道久久综合精品竹菊|