webuploader分片上传
屁话不多说直接上主题;
- webuploader,sj(WebUploader 0.1.6)网上有下
- powerUpload.js 自己写的基与楼上的插件
- asp.net mvc/Api
实现效果:
HTML:
<div class="col-sm-5 type_listfile " id="FILELIST">
<div class="panel panel-default">
<div class="panel-heading">
产品说明书
</div>
<div class="panel-body">
<ul id="picture-ul-0" class="picture-ul-0">
</ul>
</div> </div>
<div id="picker" class=" _picker" data-toggle="tooltip">选择说明书</div>
</div>
JavaScript:
var WebUpload = new $WebUpload($("#FILELIST"), '/Controller/Upload', { PF_GUID: ID,DirectoryName:GUID}, $(".picture-ul-0")); var uploader = WebUpload .init();
Controller:
public ActionResult Upload(string Id,string DirectoryName)
{
var sb = new StringBuilder();
sb.Append("[");
string NewFileNmae = Guid.NewGuid().ToString().Replace("-", "").ToUpper();
string fileExt = string.Empty;
string FileFileName = string.Empty;
if (HttpContext.Request.Form.AllKeys.Any(m => m == "chunk"))
{
//取得chunk和chunks
int chunkIndex = Convert.ToInt32(Request.Form["chunk"]);//当前分片在上传分片中的顺序(从0开始)
int chunkCount = Convert.ToInt32(Request.Form["chunks"]);//总分片数
string chunkDirectory = FileModelPath + DirectoryName + "/";
string chunkDirectoryIndex = chunkDirectory + chunkIndex.ToString();
if (!Directory.Exists(Server.MapPath(chunkDirectory)))
{
Directory.CreateDirectory(Server.MapPath(chunkDirectory));
}
FileStream addFile = new FileStream(Server.MapPath(chunkDirectoryIndex), 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));
TempReader.Close();
stream.Close();
AddWriter.Close();
addFile.Close(); Thread.Sleep(); if (chunkIndex + == chunkCount)
{
isChunk = true;
fileExt = Request.Files[].FileName.Substring(Request.Files[].FileName.LastIndexOf('.'));
var files = Directory.GetFiles(Server.MapPath(chunkDirectory));
var finalPath = Path.Combine(FileModelPath, NewFileNmae + fileExt);//最终的文件名
var fs = new FileStream(Server.MapPath(finalPath), FileMode.Create);
FileFileName = Request.Files[].FileName;
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();
string str = Server.MapPath(FileModelPath + DirectoryName + "-" + PF_TYPE);
if (Directory.Exists(str))
{
Directory.Delete(str);
}
isChunk = false;
sb.AppendFormat("{0}\"id\":\"{1}\",\"msge\":\"{2}\"{3},", "{", "PF_NAME", "信息上传成功", "}");
}
else
{
sb.AppendFormat("{0}\"id\":\"{1}\",\"msge\":\"{2}\"{3},", "{", "PF_NAME", "信息分片上传中", "}");
} }
return AjaxResult(state, sb.ToString(), true);
}
Jquery.插件
(function () {
var $WebUpload = function (_uploader, url, fdata, _queueList, _completefun, path, _NumLimit) {
this._uploader = _uploader;
this.serverurl = url;
this.fmDate = fdata;
this._imgpath = path;
// this.imageExtensions = 'gif,jpg,jpeg,bmp,png';
// this.mimeTypes = 'image/gif,image/jpg,image/jpeg,image/bmp,image/png';
// 缩略图大小
//this.ratio = window.devicePixelRatio || 1,
// this.thumbnailWidth = 160 * this.ratio;
//this.thumbnailHeight = 120 * this.ratio;
this.fileSizeLimit = 1048576000;
this.fileNumLimit = _NumLimit;
this.fileSingleSizeLimit = 1048576000;
this.swfurl = 'Uploader.swf';
this.custsuccess = null;
this.custerror = null;
this.fileCount = 0;
this._queueList = _queueList;
this._completefun = _completefun;//上传完成后需要执行的函数或者对象的点击事件
this.WebUploader;
this._messge;
};
$WebUpload.prototype = {
/**
* 初始化webUploader
*/
init: function () { var uploader = this.create();
this.bindEvent(uploader); return uploader;
},
fileNumber: function () { return this.fileCount;
},
/**
* 创建webuploader对象
*/
create: function () {
var webUploader = WebUploader.create({
pick: $('._picker', $(this._uploader))[0],
accept: {
title: 'Files',
extensions: 'pdf,doc,docx,xls,xlsx,gif,jpg,jpeg,bmp,png',
mimeTypes: 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
+ ',application/pdf'
+',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel'
+',image/gif,image/jpg,image/jpeg,image/bmp,image/png'
},
//accept: {
// title: 'Files',
// extensions: 'pdf,doc,docx,xls,xlsx',
// mimeTypes: 'application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
// + ',application/pdf' + ',application/vnd.ms-excel,application/vnd.openxmlformats - officedocument.spreadsheetml.sheet'
//},
swf: this.swfurl,
disableGlobalDnd: true,
duplicate: false,//不允许上传同一个文件
auto: false,//自动上传
server: this.serverurl,
fileNumLimit: this.fileNumLimit,
formData: this.fmDate,
threads: 1,
compress: false, //图片在上传前不进行压缩
fileSizeLimit: 200 * 1024 * 1024, // 200 M
fileSingleSizeLimit: 20 * 1024 * 1024, // 50 M
chunked: true, //分片处理大文件
chunkSize: 2 * 1024 * 1024,
/*
pick: {
id: '#filePicker',
label: '点击选择图片'
},
formData: {
uid: 123
},
dnd: '#dndArea',
paste: '#uploader',
swf: 'Scripts/Uploader.swf',
chunked: true, //分片处理大文件
chunkSize: 2 * 1024 * 1024,
server: 'fileupload.ashx',
disableGlobalDnd: true,
threads: 1, //上传并发数
//由于Http的无状态特征,在往服务器发送数据过程传递一个进入当前页面是生成的GUID作为标示
formData: { guid: GUID },
fileNumLimit: 300,
compress: false, //图片在上传前不进行压缩
fileSizeLimit: 200 * 1024 * 1024, // 200 M
fileSingleSizeLimit: 50 * 1024 * 1024 // 50 M */ });
return webUploader;
}, /**
* 绑定事件
*/
bindEvent: function (bindedObj) {
var me = this;
bindedObj.on('fileQueued', function (file) {
var imgHtml = '';
if (file.name.substring(file.name.lastIndexOf("."), file.name.length).indexOf('doc') > -1) {
imgHtml = '<img src="' + me._imgpath +'/doc.ico" />';
}
if (file.name.substring(file.name.lastIndexOf("."), file.name.length).indexOf('pdf') > -1) {
imgHtml = '<img src="' + me._imgpath +'/apdf.ico" />';
}
if (file.name.substring(file.name.lastIndexOf("."), file.name.length).indexOf('els') > -1) {
imgHtml = '<img src="' + me._imgpath + '/els.ico" />';
}
if (file.name.substring(file.name.lastIndexOf("."), file.name.length).indexOf('png') > -1 || file.name.substring(file.name.lastIndexOf("."), file.name.length).indexOf('jpg') > -1 || file.name.substring(file.name.lastIndexOf("."), file.name.length).indexOf('jpeg') > -1) {
imgHtml = '<img src="' + me._imgpath + '/png.ico" />';
}
var $li = $('<li name="info" fid="' + file.id + '" id="' + Math.floor((Math.random() + Math.floor(Math.random() * 9 + 1)) * Math.pow(10, 9)) + me.fileCount + '" class="item">' +
imgHtml +
'<a class="info" >' + file.name + '</a>' +
'<a class="webuploadDelbtn">删除</a>' +
' <a class="pss">0.00%</a>'+
'<br />' +
'</li>'
);
$li.on("click", ".webuploadDelbtn", function () {
$li.find(".webuploadDelbtn").parent().remove();
bindedObj.removeFile(file, true);
});
$(me._uploader).find(me._queueList).append($li);
me.fileCount++;
});
// 文件上传过程中创建进度条实时显示。
bindedObj.on('uploadProgress', function (file, percentage) {
$(me._uploader).find(me._queueList).find('li').each(function () {
if ($(this).attr("fid") == file.id) {
// alert((percentage * 100) + '%')
var _Progress = percentage * 100 >= 100 ? 100 : percentage * 100; $(this).find(".pss").html(_Progress.toFixed(2) + '%');
}
}); //var $li = $(me._uploader).find(me._queueList).find("li");
//var $percent = $li.find('.progress span');
//alert($li.html());
//// 避免重复创建
//if (!$percent.length) {
// $percent = $('<p class="progress"><span></span></p>')
// .appendTo($li)
// .find('span');
//} //$percent.css('width', percentage * 100 + '%'); });
// 文件上传成功,给item添加成功class, 用样式标记上传成功。
bindedObj.on('uploadSuccess', function (file, response) {
me._messge = response;
$(me._uploader).find(me._queueList).find('a.webuploadDelbtn').remove();
me.fileCount--;
}); // 文件上传失败,显示上传出错。
bindedObj.on('uploadError', function (file, reason) {
}); // 其他错误
bindedObj.on('error', function (type) {
var message = "";
if (type === 'Q_EXCEED_NUM_LIMIT') {
message = '最多允许上传10份';
}
if (type == "Q_TYPE_DENIED") {
message = "请上传doc、pdf格式文件";
} else if (type == "F_EXCEED_SIZE") {
message = "文件大小不能超过20M" ;
}
if ('function' == typeof me.custerror) {
me.custerror(message);
}
// alert(type);
}); // 完成上传完了,成功或者失败
bindedObj.on('uploadComplete', function (file) {
// alert(me.fileCount);
if (me.fileCount == 0) {
//me._completefun.click();
///上传完后执行的
//alert(me._completefun);
if (eval(me._completefun) != undefined)
eval(me._completefun).apply(this, []);
} });
}
};
window.$WebUpload = $WebUpload;
}());
大功告成!!!!
webuploader分片上传的更多相关文章
- 用百度webuploader分片上传大文件
一般在做文件上传的时候,都是通过客户端把要上传的文件上传到服务器,此时上传的文件都在服务器内存,如果上传的是视频等大文件,那么服务器内存就很紧张,而且一般我们都是用flash或者html5做异步上传, ...
- 93.vue---在vue环境用webuploader分片上传插件遇到的超级bug(独家仅此一份)
本来我是想想用vue-simple-uploader (https://www.cnblogs.com/xiahj/p/vue-simple-uploader.html)的 但是公司后台已经做好了we ...
- Webuploader 大文件分片上传
百度Webuploader 大文件分片上传(.net接收) 前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片 ...
- Vue2.0结合webuploader实现文件分片上传
Vue项目中遇到了大文件分片上传的问题,之前用过webuploader,索性就把Vue2.0与webuploader结合起来使用,封装了一个vue的上传组件,使用起来也比较舒爽. 上传就上传吧,为什么 ...
- 30分钟玩转Net MVC 基于WebUploader的大文件分片上传、断网续传、秒传(文末附带demo下载)
现在的项目开发基本上都用到了上传文件功能,或图片,或文档,或视频.我们常用的常规上传已经能够满足当前要求了, 然而有时会出现如下问题: 文件过大(比如1G以上),超出服务端的请求大小限制: 请求时间过 ...
- 【原创】MVC +WebUploader 实现分片上传大文件
大文件的上传是我一直以来想学习的一个技术点,今天在项目闲暇之时,终于有机会自己尝试了一把,本文仅仅是个Demo,各种错误处理都么有,仅限于大家来学习思路. 参考博文:http://www.cnblog ...
- 百度Webuploader 大文件分片上传(.net接收)
前阵子要做个大文件上传的功能,找来找去发现Webuploader还不错,关于她的介绍我就不再赘述. 动手前,在园子里找到了一篇不错的分片上传的帖子,参考之后,踏出了第一步.此文记录我这次实践的点滴,仅 ...
- asp.net mvc+webuploader大文件分片上传
首先是前端: var GUID = WebUploader.Base.guid();//一个GUID uploadereditsVideo = WebUploader.create({ // swf文 ...
- .NetCore+WebUploader实现大文件分片上传
项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并. 使用了开源的前台上传插件WebUploader(http://fex.baidu.com/webupload ...
随机推荐
- NHibernate4使用Oracle.ManagedDataAccess.dll连接oracle及配置多个数据库连接
NHibernate数据库配置参数在hibernate.cfg.xml中 <?xml version="1.0" encoding="utf-8"?> ...
- float样式的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 普天同庆,微博开通,从今以后,努力用功! 狗屎一样的顺口溜!Q狗屎!!狗屎。。。。。 测试。。测试。。。没刷过微博。屯里来的。看看啥效果
普天同庆,微博开通,从今以后,努力用功! 狗屎一样的顺口溜!Q狗屎!!狗屎..... 测试..测试...没刷过微博.屯里来的.看看啥效果
- Notepad++的实用技巧
一. 安装notepad + + notepad++的下载.安装非常easy.下一步下一步,所有选项都默认就可以安装好.但有几点需要注意. 截止到写这篇博文,notepad++的最新版本为7.5 ...
- 【证明】【一题多解】布尔不等式(union bound)的证明
布尔不等式(Boole's inequality)也叫(union bound),即并集的上界,描述的是至少一个事件发生的概率(P(⋃iAi)" role="presentatio ...
- 前端跨域(二):JSONP
上一篇文章 前端跨域(一):CORS 实现了跨域的一种解决方案,IE8 和其他浏览器分别通过 XDomainRequest 和 XHR 对象原生支持 CORS.这次我将补一补 Web 服务中也非常流行 ...
- POJ - 1681: Painter's Problem (开关问题-高斯消元)
pro:开关问题,同上一题. 不过只要求输出最小的操作步数,无法完成输出“inf” sol:高斯消元的解对应的一组合法的最小操作步数. #include<bits/stdc++.h> #d ...
- Vue慕课网音乐项目随手记--node代理及数据抓取
1.抓取数据 链接 https://y.qq.com/portal/playlist.html Parameters 通过上图能看到,qq音乐通过设置了refer和host来保护接口. 那么怎么才 ...
- SpringSecurity身份验证基础入门
对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(如:Apache Shiro.Spring Security). pom.xm ...
- 今天在2cto网站看到一个有关try{}catch(){}finally{}语句中含有return的讲解,理解很透彻。
publicclassTrycatchTest{ publicstaticvoidmain(String[]args){ System.out.println("x:"+newTr ...