asp.net mvc+webuploader大文件分片上传
首先是前端:
- var GUID = WebUploader.Base.guid();//一个GUID
- uploadereditsVideo = WebUploader.create({
- // swf文件路径
- swf: '../../Scripts/plugins/webuploader/Uploader.swf',
- // 文件接收服务端。
- server: '/AjaxUpload/ChunkUpload',
- pick: {
- id: '#picker',
- label: '上传',
- innerHTML: '上传',
- multiple: false
- },
- fileNumLimit: 1,
- fileSingleSizeLimit: 1024 * 1024 *100,
- chunked: true,//开始分片上传
- chunkSize: 1024 * 1024 * 2,//每一片的大小
- formData: {
- guid: GUID //自定义参数
- }
- });
- uploadereditsVideo.on('fileQueued', function (file) {
- uploadereditsVideo.upload();
- });
- // 文件上传成功
- uploadereditsVideo.on('uploadSuccess', function (file, response) {
- //合并文件
- $.post('/AjaxUpload/Merge', { guid: GUID, fileName: file.name }, function (data) {
- if (data.r == 1) {
- alert("上传完成");
- }
- else {
- alert(data.err);
- }
- });
- });
后端接收方法Upload
- public ActionResult Upload()
- {
- //如果进行了分片
- if (Request.Form.AllKeys.Any(m => m == "chunk"))
- {
- //取得chunk和chunks
- int chunk = Convert.ToInt32(Request.Form["chunk"]);//当前分片在上传分片中的顺序(从0开始)
- int chunks = Convert.ToInt32(Request.Form["chunks"]);//总分片数
- //根据GUID创建用该GUID命名的临时文件夹
- string folder = Server.MapPath("~/upload/" + Request["guid"] + "/");
- string path = folder + chunk;
- //建立临时传输文件夹
- if (!Directory.Exists(Path.GetDirectoryName(folder)))
- {
- Directory.CreateDirectory(folder);
- }
- FileStream addFile = new FileStream(path, FileMode.Append, FileAccess.Write);
- BinaryWriter AddWriter = new BinaryWriter(addFile);
- //获得上传的分片数据流
- var file = Request.Files[];
- Stream stream = file.InputStream;
- BinaryReader TempReader = new BinaryReader(stream);
- //将上传的分片追加到临时文件末尾
- AddWriter.Write(TempReader.ReadBytes((int)stream.Length));
- //关闭BinaryReader文件阅读器
- TempReader.Close();
- stream.Close();
- AddWriter.Close();
- addFile.Close();
- TempReader.Dispose();
- stream.Dispose();
- AddWriter.Dispose();
- addFile.Dispose();
- return Json(new { chunked = true, hasError = false, f_ext = Path.GetExtension(file.FileName) });
- }
- else//没有分片直接保存
- {
- Request.Files[].SaveAs(Server.MapPath("~/upload/" + DateTime.Now.ToFileTime() + Path.GetExtension(Request.Files[].FileName)));
- return Json(new { chunked = true, hasError = false });
- }
- }
合并方法Merge
- public ActionResult Merge()
- {
- try
- {
- var guid = Request["guid"];//GUID
- var uploadDir = Server.MapPath("~/upload");//Upload 文件夹
- var dir = Path.Combine(uploadDir, guid);//临时文件夹
- var ext = Path.GetExtension(Request["fileName"]);
- var files = Directory.GetFiles(dir);//获得下面的所有文件
- var name = Guid.NewGuid().ToString("N") + ext;
- var finalPath = Path.Combine(uploadDir, name);//最终的文件名
- var fs = new FileStream(finalPath, FileMode.Create);
- foreach (var part in files.OrderBy(x => x.Length).ThenBy(x => x))//排一下序,保证从0-N Write
- {
- var bytes = System.IO.File.ReadAllBytes(part);
- fs.Write(bytes, , bytes.Length);
- bytes = null;
- System.IO.File.Delete(part);//删除分块
- }
- fs.Flush();
- fs.Close();
- Directory.Delete(dir);//删除文件夹
- return Json(new { r = , path = "/upload/" + name });
- }
- catch (Exception ex)
- {
- return Json(new { r = , err = ex.Message });
- }
- }
以上就是分片上传的方法
asp.net mvc+webuploader大文件分片上传的更多相关文章
- Webuploader 大文件分片上传
百度Webuploader 大文件分片上传(.net接收) 前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片 ...
- 百度Webuploader 大文件分片上传(.net接收)
前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片上传的帖子,参考之后,踏出了第一步.此文记录我这次实践的点滴,仅 ...
- 百度Webuploader 大文件分片上传(.net接收)
版权所有 2009-2018荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/up6.2/in ...
- asp.net实现浏览器大文件分片上传
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...
- thinkphp+webuploader实现大文件分片上传
大文件分片上传,简单来说就是把大文件切分为小文件,然后再一个一个的上传,到最后由这些小文件再合并成原来的文件 webuploader下载地址及其文档:http://fex.baidu.com/webu ...
- 在React中使用WebUploader实现大文件分片上传的踩坑日记!
前段时间公司项目有个大文件分片上传的需求,项目是用React写的,大文件分片上传这个功能使用了WebUploader这个组件. 具体交互是: 1. 点击上传文件button后出现弹窗,弹窗内有选择文件 ...
- Vue2.0结合webuploader实现文件分片上传
Vue项目中遇到了大文件分片上传的问题,之前用过webuploader,索性就把Vue2.0与webuploader结合起来使用,封装了一个vue的上传组件,使用起来也比较舒爽. 上传就上传吧,为什么 ...
- java springboot 大文件分片上传处理
参考自:https://blog.csdn.net/u014150463/article/details/74044467 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时 ...
- vue+大文件分片上传
最近公司在使用vue做工程项目,实现大文件分片上传. 网上找了一天,发现网上很多代码都存在很多问题,最后终于找到了一个符合要求的项目. 工程如下: 对项目的大文件上传功能做出分析,怎么实现大文件分片上 ...
随机推荐
- 跟我学算法-tensorflow 实现线性拟合
TensorFlow™ 是一个开放源代码软件库,用于进行高性能数值计算.借助其灵活的架构,用户可以轻松地将计算工作部署到多种平台(CPU.GPU.TPU)和设备(桌面设备.服务器集群.移动设备.边缘设 ...
- C# event 事件学习
C# event 事件学习 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-26 章节: 简单事件编写 模拟 WPF 控件传递 ...
- U3D 代码自动化生成定制预置体的旋转问题
//定制预置体 //要求:1,模型面向U3D的Z轴正向(由MAX导出时是面向U3D的X负向的) //2,增加一些常用挂点,3增加一个圆形阴影片,4,添加包围盒 //根据这些要求制作预置休 static ...
- Windows下DOS命令大全(经典收藏)
copy \\ip\admin$\svv.exe c:\ 或:copy\\ip\admin$\*.* 复制对方admini$共享下的srv.exe文件(所有文件)至本地C: xcopy 要复制的文件或 ...
- 用java实现一个简易编译器
- ubuntu Qt5 opencv3.4 项目配置
#------------------------------------------------- # # Project created by QtCreator 2019-03-25T14:14 ...
- rtx反向单点登录
1>通过ie浏览器的activx获取当前登录账户,其它浏览器不行,不支持activx. <%@ Page Language="C#" %> <!DOCTYP ...
- Jenkins一天中构建多次
Build after other projects are built:在其他项目触发的时候触发,里面有分为三种情况,也就是其他项目构建成功.失败.或者不稳定的时候触发项目: Poll SCM:定时 ...
- 初学者教程之命名空间,范围解析及LEDB规则
2014年5月12日 Sebastian Raschka编写 这是一篇关于采用LEGB规则实现Python变量命名空间及范围解析的简短教程.下面章节将会提供简短的可以说明问题的示例代码块来简要阐述问题 ...
- c++对象模型是什么,对象的内存布局和结构问题
在c++发明的初期对于c++对象模型的争论从来没有停止过直到标准委员会通过了最终的c++对象模型这件事情才变得尘埃落定.C++对象模型可能是最不需要去解释的,但是又是不得不去说的因为c++的入门最先接 ...