html5中文件域+ FileReader分段如何读取文件并上传到服务器

  介绍

这篇文章主要介绍html5中文件域+ FileReader分段如何读取文件并上传到服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1。简单分段读取文件为Blob, ajax上传到服务器

& lt; p类=癱ontainer"比;   类& lt; p=懊姘錺anel-default"祝辞   类& lt; p=皃anel-heading"祝辞分段读取文件:& lt;/p>   类& lt; p=皃anel-body"祝辞   & lt;输入类型=癴ile"id=癴ile"/比;   & lt;引用风格=暗ゴ史指?打破所有;“祝辞& lt;/blockquote>   & lt;/p>   & lt;/p>   & lt;/p>

JS:

/*   *分段读取文件为blob,并使用ajax上传到服务器   *分段上传exe文件会抛出异常   */var fileBox=. getelementbyid(& # 39;文件# 39;);   文件。onchange=function () {//获取文件对象   var文件=this.files [0];   var=new FileReader读者();   var一步=1024 * 1024;   var总=file.size;   var cuLoaded=0;   console.info(“文件大小:“+ file.size);   var日期开始时间=new ();//读取一段成功   读者。onload=function (e) {//处理读取的结果   var=e.loaded加载;//将分段数据上传到服务器   还是(读者。结果,cuLoaded函数(){   console.info(& # 39;加载:& # 39;+ cuLoaded + & # 39;电流:& # 39;+加载);//如果没有读完,继续   cuLoaded +=加载;   如果(cuLoaded & lt;){   readBlob (cuLoaded);   其他}{   console.log(& # 39;总共用时:& # 39;+(新日期(日).getTime ()——startTime.getTime ())/1000);   cuLoaded=总;   }   });   }//指定开始位置,分块读取文件   函数readBlob(开始){//指定开始位置和结束位置读取文件//console.info(& # 39;开始:& # 39;+开始);   var blob=文件。片(开始,开始+步骤);   reader.readAsArrayBuffer (blob);   }//开始读取   readBlob (0);//关键代码上传到服务器   函数还是(因此,startIndex>///& lt; summary>///upload2的摘要说明///& lt;/summary>   公开课upload2: IHttpHandler   {   LogHelper。LogHelper _log=new LogHelper.LogHelper ();   int totalCount=0;   公共空间ProcessRequest (HttpContext上下文)   {   HttpContext _Context=上下文;//接收文件   HttpRequest点播=_Context.Request;   如果(req.Files。数& lt;=0)   {   WriteStr(“获取服务器上传文件失败“);   返回;   }   HttpPostedFile带有_file=req.Files [0];//获取参数//字符串ext=req.Form (“extention");   字符串文件名=req.Form (“filename");//如果是int类型当文件大的时候会出问题最大也就是1.9999999990686774克   int加载=Convert.ToInt32 (req.Form [“loaded"]);   totalCount +=加载;      字符串新名称=@" F: \ JavaScript_Solution \ H5Solition \ H5Solition \ \ TempFile \“内容;   新名称+=文件名;//接收二级制数据并保存   流流=_file.InputStream;   如果流。长度& lt;=0)   抛出新的异常(“接收的数据不能为空“);   byte [] dataOne=新字节(stream.Length);   流。读(dataOne 0 dataOne.Length);   FileMode fs=new FileStream文件流(新名称。附加,FileAccess。写,文件共享。读,1024);   试一试   {   fs。写(dataOne 0 dataOne.Length);   }   最后   {   fs.Close ();   stream.Close ();   }   _log。WriteLine ((totalCount + dataOne.Length) .ToString ());   WriteStr(“分段数据保存成功“);   }   私人空间WriteStr (string str)   {   HttpContext.Current.Response.Write (str);   }   公共bool IsReusable   {   得到   {   返回true;   }   }

2。分段读取文件为blob,并使用ajax上传到服务器,追加中止,继续功能操作

& lt; p类=癱ontainer"比;   类& lt; p=懊姘錺anel-default"祝辞   类& lt; p=皃anel-heading"祝辞分段读取文件:& lt;/p>   类& lt; p=皃anel-body"祝辞   & lt;输入类型=癴ile"id=癴ile"/比;   & lt; br/比;   & lt;输入类型=癰utton"值=https://www.yisu.com/zixun/敝兄?>/*   *分段读取文件为blob,并使用ajax上传到服务器   *使用Ajax方式提交上传数据文件大小应该有限的值,最好500 mb以内   *原因短时间过多的ajax请求,Asp.Net后台会崩溃获取上传的分块数据为空   *取代方式,长连接或WebSocket   */var fileBox=. getelementbyid(& # 39;文件# 39;);   读者var=零;//读取操作对象   var一步=1024 * 1024 * 3.5;//每次读取文件大小   var cuLoaded=0;//当前已经读取总数   var文件=零;//当前读取的文件对象   var enableRead=true;//标识是否可以读取文件   fileBox。onchange=function () {//获取文件对象   文件=this.files [0];   var总=file.size;   console.info(“文件大小:“+ file.size);   var日期开始时间=new ();   读者=new FileReader ();//读取一段成功   读者。onload=function (e) {//处理读取的结果   结果var=reader.result;   var=e.loaded加载;   如果(enableRead==false)   返回错误;//将分段数据上传到服务器   还是(因此,cuLoaded函数(){   console.info(& # 39;加载:& # 39;+ cuLoaded + & # 39; - - - - -现在:& # 39;+加载);//如果没有读完,继续   cuLoaded +=加载;   如果(cuLoaded & lt;){   readBlob (cuLoaded);   其他}{   console.log(& # 39;总共用时:& # 39;+(新日期(日).getTime ()——startTime.getTime ())/1000);   cuLoaded=总;   }//显示结果进度   var=(cuLoaded/总数)* 100百分比;   . getelementbyid(& # 39;状态# 39;)。innerText=实现百分比;   . getelementbyid (& # 39; progressOne& # 39;)。值=https://www.yisu.com/zixun/percent;   });   }//开始读取   readBlob (0);//关键代码上传到服务器   函数还是(因此,startIndex>/*   *分段读取文件为二进制数组,并使用ajax上传到服务器   *使用二进制数组传递的方式,效率特别低,最终文件还与原始大小有些偏差   */var fileBox=. getelementbyid(& # 39;文件# 39;);   var=new FileReader读者();//读取操作对象   var一步=1024 * 1024;//每次读取文件大小   var cuLoaded=0;//当前已经读取总数   var文件=零;//当前读取的文件对象   var enableRead=true;//标识是否可以读取文件   fileBox。onchange=function () {//获取文件对象   如果文件==null)//如果赋值多次会有丢失数据的可能   文件=this.files [0];   var总=file.size;   console.info(“文件大小:“+ file.size);   var日期开始时间=new ();//读取一段成功   读者。null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

html5中文件域+ FileReader分段如何读取文件并上传到服务器