您好,欢迎访问一九零五行业门户网

H5读取文件并上传到服务器的方法

这次给大家带来h5读取文件并上传到服务器的方法,h5读取文件并上传到服务器的方法的注意事项有哪些,下面就是实战案例,一起来看一下。
说明:使用ajax方式上传,文件不能过大,最好小于三四百兆,因为过多的连续ajax请求会使后台崩溃,获取inputstream中数据会为空,尤其在google浏览器测试过程中。
1.简单分段读取文件为blob,ajax上传到服务器
<p class="container">     <p class="panel panel-default">         <p class="panel-heading">分段读取文件:</p>         <p class="panel-body">             <input type="file" id="file" />             <blockquote style="word-break:break-all;"></blockquote>         </p>     </p> </p>
js:
/* * 分段读取文件为blob ,并使用ajax上传到服务器 * 分段上传exe文件会抛出异常 */ var filebox = document.getelementbyid('file'); file.onchange = function () {     //获取文件对象     var file = this.files[0];     var reader = new filereader();     var step = 1024 * 1024;     var total = file.size;     var culoaded = 0;     console.info(文件大小: + file.size);     var starttime = new date();     //读取一段成功     reader.onload = function (e) {         //处理读取的结果         var loaded = e.loaded;         //将分段数据上传到服务器         uploadfile(reader.result, culoaded, function () {             console.info('loaded:' + culoaded + 'current:' + loaded);             //如果没有读完,继续             culoaded += loaded;             if (culoaded < total) { readblob(culoaded); } else { console.log('总共用时:' + (new date().gettime() - starttime.gettime()) / 1000); culoaded = total; } }); } //指定开始位置,分块读取文件 function readblob(start) { //指定开始位置和结束位置读取文件 //console.info('start:' + start); var blob = file.slice(start, start + step); reader.readasarraybuffer(blob); } //开始读取 readblob(0); //关键代码上传到服务器 function uploadfile(result, startindex, onsuccess) { var blob = new blob([result]); //提交到服务器 var fd = new formdata(); fd.append('file', blob); fd.append('filename', file.name); fd.append('loaded', startindex); var xhr = new xmlhttprequest(); xhr.open('post', '../ashx/upload2.ashx', true); xhr.onreadystatechange = function () { if (xhr.readystate == 4 && xhr.status == 200) { // var data = eval('(' + xhr.responsetext + ')'); console.info(xhr.responsetext); if (onsuccess) onsuccess(); } } //开始发送 xhr.send(fd); } }
后台代码:
/// <summary> /// upload2 的摘要说明 /// </summary> public class upload2 : ihttphandler {     loghelper.loghelper _log = new loghelper.loghelper();     int totalcount = 0;     public void processrequest(httpcontext context)     {         httpcontext _context = context;         //接收文件         httprequest req = _context.request;         if (req.files.count (byte)x).toarray();         //转换方式二         byte[] dataarray = data.split(',').select(q => int.parse(q)).select(q => (byte)q).toarray();         //获取参数         string filename = req.form[filename];         //如果是int 类型当文件大的时候会出问题 最大也就是 1.9999999990686774g         int loaded = convert.toint32(req.form[loaded]);         totalcount += loaded;         string newname = @f:\javascript_solution\h5solition\h5solition\content\tempfile\;         newname += filename;         try         {             // 接收二级制数据并保存             byte[] dataone = dataarray;             filestream fs = new filestream(newname, filemode.append, fileaccess.write, fileshare.read, 1024);             try             {                 fs.write(dataone, 0, dataone.length);             }             finally             {                 fs.close();             }             _log.writeline((totalcount + dataone.length).tostring());             writestr(分段数据保存成功);         }         catch (exception ex)         {             throw ex;         }     }     private void writestr(string str)     {         httpcontext.current.response.write(str);     }     public bool isreusable     {         get         {             return false;         }     } }
相信看了本文案例你已经掌握了方法,更多精彩请关注其它相关文章!
推荐阅读:
html5怎么实现图片转圈的动画效果
h5实现桌面通知
以上就是h5读取文件并上传到服务器的方法的详细内容。
其它类似信息

推荐信息