(二)asp.net WebUploader 分片上传
来源:互联网 发布:淘宝官网素材网有哪些 编辑:程序博客网 时间:2024/05/29 15:08
环境:见上一章
原理:服务器端代码将webuploader分片文件,追加到文件上。
结论:1、asp.net做服务器端,单线程条件下(webuploader的threads值为1),测试上传1.7G文件没有问题;不支持多线程,可改进;2、同样代码移植到 j2ee springMVC 环境下,仅能支持到620M左右,主要原因为java环境下无法有效释放文件流。
目标:将现有流程优化,多进程、分片上传,在文档结尾处将文件合并,目前无时间安排此优化。
1、web.config配置可参见前章。
2、html代码如下:
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <link href="dist/webuploader.css" rel="stylesheet" /> <script src="dist/jquery.js"></script> <script src="dist/webuploader.js"></script></head><body> <div class="wu-example"> <!--用来存放文件信息--> <div id="thelist" class="uploader-list"></div> <div class="btns"> <div id="picker">选择文件</div> <button id="ctlBtn" class="btn btn-default">开始上传</button> </div> </div> <script> var uploader = WebUploader.create({ // swf文件路径 swf: '/dist/Uploader.swf', // 文件接收服务端。 server: 'fileuploadchunk.ashx', chunked: true, threads: 1, fromData : { guid : 'guid'} , // 选择文件的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: '#picker', // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize: false }); uploader.on('beforeFileQueued', function (file) { debugger }); // 当有文件被添加进队列的时候 uploader.on('fileQueued', function (file) { //alert(123); $("#thelist").append('<div id="' + file.id + '" class="item">' + '<h4 class="info">' + file.name + '</h4>' + '<p class="state">等待上传...</p>' + '</div>'); }); uploader.on('uploadSuccess', function (file) { $('#' + file.id).find('p.state').text('已上传'); }); uploader.on('uploadError', function (file) { $('#' + file.id).find('p.state').text('上传出错'); }); uploader.on('uploadComplete', function (file) { $('#' + file.id).find('.progress').fadeOut(); }); $("#ctlBtn").on('click', function () { if ($(this).hasClass('disabled')) { return false; } uploader.options.formData.guid = Math.random(); uploader.upload(); }); </script></body></html>
3、一般处理程序(fileuploadchunk.ashx),代码如下:
<%@ WebHandler Language="C#" Class="fileuploadchunk" %>using System;using System.Web;using System.Linq;using System.IO;public class fileuploadchunk : IHttpHandler{ public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; if (context.Request.Form.AllKeys.Any(m => m == "chunk")) { int chunk = Convert.ToInt32(context.Request.Form["chunk"]); // 当前分片 int chunks = Convert.ToInt32(context.Request.Form["chunks"]); // 分片总计 string folder = context.Server.MapPath("~/Upload/"); string filename = folder + context.Request.Form["guid"]; // FileStream addFile = new FileStream(filename, FileMode.Append, FileAccess.Write); // 前端 threads= 1 可用 FileStream addFile = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.ReadWrite, 1024, true); // 前端 threads值> 1 可用 BinaryWriter AddWriter = new BinaryWriter(addFile); HttpPostedFile file = context.Request.Files[0]; Stream stream = file.InputStream; BinaryReader TempReader = new BinaryReader(stream); AddWriter.Write(TempReader.ReadBytes((int)stream.Length)); TempReader.Close(); stream.Close(); AddWriter.Close(); addFile.Close(); TempReader.Dispose(); stream.Dispose(); AddWriter.Dispose(); addFile.Dispose(); //如果是最后一个分片,则重命名临时文件为上传的文件名 if (chunk == (chunks - 1)) { FileInfo fileinfo = new FileInfo(filename); fileinfo.MoveTo(context.Server.MapPath("~/Upload/" + context.Request.Files[0].FileName)); } } else // 没有分片直接保存 { context.Request.Files[0].SaveAs(context.Server.MapPath("~/Upload/" + context.Request.Files[0].FileName)); } context.Response.Write("success"); } public bool IsReusable { get { return false; } }}
0 0
- (二)asp.net WebUploader 分片上传
- (一) asp.net WebUploader 上传
- webuploader java分片上传
- 百度Webuploader 大文件分片上传(.net接收)
- WebUploader asp.net 多文件上传
- WebUploader asp.net 多文件上传
- (三)springMVC WebUploader分片上传
- webuploader分片上传大文件
- webuploader 实现大文件 分片上传
- webuploader分片上传(前后端分离)
- asp.net使用百度的webuploader批量上传图片
- Asp.Net Mvc 使用WebUploader 多图片上传
- Asp.Net Mvc 使用WebUploader 多图片上传
- Asp.Net Mvc 使用WebUploader 多图片上传
- 基于NodeJs的Express及Webuploader实现大文件分片上传与合并(二)——组件化实现
- 前段WebUploader;JavaEE大文件分片上传接收
- 使用百度webuploader插件进行多文件类型分片上传实例
- 使用百度webuploader插件进行多文件类型分片上传实例
- PHP数组、日期、文件的简单使用
- inline学习笔记
- session信息入库
- matlab中fopen函数与fprintf用法
- 聚簇索引与非聚簇索引学习总结
- (二)asp.net WebUploader 分片上传
- leetcode 67. Add Binary
- leetcode 278 First Bad Version
- 基于bootsrtap的网页开发|慕课网案例
- 欢迎使用CSDN-markdown编辑器
- C#的懵逼之路
- PagerAdapter,FragmentPagerAdapter,FragmentStatePagerAdapter
- mysql报错及其解决方式集合
- Struts2 配置文件result的name属性和type属性