Plugin - Plupload
Plupload
引用
<link href="~/Plupload/jquery.plupload.queue.css" rel="stylesheet" /> <script src="~/Scripts/jquery.min.js"></script> <script src="~/Plupload/plupload.full.min.js"></script> <script src="~/Plupload/jquery.plupload.queue.min.js"></script>
前端
<div id="html5_uploader" >Error.</div>
$("#html5_uploader").pluploadQueue({
//用来指定上传方式,指定多个上传方式请使用逗号隔开。
runtimes: 'html5',
//触发文件选择对话框的DOM元素
browse_button: 'btn-headup',
//服务器端接收和处理上传文件的脚本地址
url: "/Files/Uploader",
//当值为true时会为每个上传的文件生成一个唯一的文件名
unique_names: true,
//是否可以在文件浏览对话框中选择多个文件
multi_selection: true,
//分片上传文件时,每片文件被切割成的大小 当该值为0时表示不使用分片上传功能
chunk_size: "1mb",
//可以使用该参数来限制上传文件的类型,大小等
filters: {
//用来限定上传文件的类型,为一个数组
mime_types: [ { title : "Image files", extensions : "jpg,gif,png" }],
//用来限定上传文件的大小
max_file_size:'400kb',
//是否限制选取重复的文件, true 为不允许
prevent_duplicates: true
},
//当发生plupload.HTTP_ERROR错误时的重试次数,为0时表示不重试
max_retries: 0,
// 可以使用该参数对将要上传的图片进行压缩
resize: {
width: 100,
height: 100,
//是否裁剪图片
crop: true,
//压缩后图片的质量
quality: 60,
//压缩后是否保留图片的元数据
preserve_headers: false
},
//指定了使用拖拽方式来选择上传文件时的拖拽区域
drop_element: "",
//当Plupload初始化完成后触发
init: {
// 每个文件上传完毕后引发的事件
//uploader 为当前的plupload实例对象
//file 为触发此事件的文件对象
//responseObject 为服务器返回的信息对象
FileUploaded: function (uploader,file,responseObject) {
//response:服务器返回的文本
responseObject.response;
//responseHeaders:服务器返回的头信息
responseObject.responseHeaders;
//status:服务器返回的http状态码,比如200
responseObject.status;
},
//当使用文件小片上传功能时,每一个小片上传完成后触发
//uploader 为当前的plupload实例对象
//file 为触发此事件的文件对象
//responseObject 为服务器返回的信息对象
ChunkUploaded: function(uploader,file,responseObject){
//offset:该文件小片在整体文件中的偏移量
responseObject.offset;
//response:服务器返回的文本
responseObject.response;
//responseHeaders:服务器返回的头信息
responseObject.responseHeaders;
//status:服务器返回的http状态码,比如200
responseObject.status;
//total:该文件(指的是被切割成了许多文件小片的那个文件)的总大小,单位为字节
responseObject.total;
},
//所有文件上传完毕后引发的事件,
//uploader 为当前的plupload实例对象
//files 为一个数组,里面的元素为本次已完成上传的所有文件对象
UploadComplete: function (uploader, files) {
$(".plupload_upload_status").hide();
//继续显示文件上传按钮
$(".plupload_buttons").show();
// 使文件上传的按钮有效
uploader.disableBrowse(false);
},
//当发生错误时触发
Error: function(uploader,errObject){
//错误代码,具体请参考plupload上定义的表示错误代码的常量属性
errObject.code;
//与该错误相关的文件对象
errObject.file;
//错误信息
errObject.message;
},
//当调用destroy方法时触发
Destroy: function(uploader){
}
},
//当Init事件发生后触发
PostInit: {}
});
后台
/// <summary> /// 文件上传的后台方法 /// 可在后面加自定义参数集 /// </summary> /// <param name="chunk"></param> /// <returns></returns> [HttpPost] public ActionResult UploadFile(int? chunk, string name) { var fileUpload = Request.Files[0]; return Content("返回的内容自定义,如文件的url相对路径,客服端抓取方法:FileUploaded的info.response", "text/plain"); }
其他要点参考地址: http://www.cnblogs.com/2050/p/3913184.html
------------------------------ 一个图片上传器的集成 --------------------------------
<!-- 用于打开上传框的按钮, 可以设置在页面任何地方, id 不能重复 --> <button id="pup-btn1" type="button">上传入驻联系图片</button> <!-- 图片上传器的总容器 --> <div class="pup-uploader"> <!-- 用于实例化为文件上传器的 div 容器, plup-btn 指的是希望点击哪个按钮来打开此实例 --> <div class="pup-main" plup-btn="pup-btn1" hidden></div> <!-- 上传完图片后将图片显示在此容器中 --> <div class="pup-image-box"></div> <!-- 上传完图片后 将图片的地址存储在此表单中, 用于提交 --> <input required class="pup-input" type="hidden" value="@Model.入驻联系图片File" name="入驻联系图片File"/> </div>
/* ********************************* @ 作者 : LakNeumann @ 最后修改时间: 2017-04-11 @ 版本: 1.0 ********************************* */ /* * 生成图片容器 * @param {string} path 图片所在的路径, 用于预览和生成到 input 上 */ var _html = (path) => "<div class='pup-image'>" + "<img src=" + path + ">" + "<div class='pup-remove k-icon k-i-delete'></div>" + "</div>"; $(function () { // 根据 input 的初始值来初始化 image-box $(".pup-input").each(function (index, ele) { var _i = $(this); var imgs = _i.val(); // 如果 input 中有值 if (imgs.length > 0) { // 多个 url 分隔符 var ar = imgs.split("|"); var _b = _i.siblings('.pup-image-box'); // 防止 imagebox 变动引发 DOMSubtreeModified 事件 // 利用变量先保存值, 然后一次性替换 var _c = ""; $.each(ar, function (index, value) { _c += _html(value); }); // 一次性替换 _b.append(_c); } }) // 绑定图片移除按钮事件 $(".pup-image-box").on("click", ".pup-remove", function () { var _o = $(this).parent(); _o.remove(); }) // 图片大容器中内容发生变动(添加图片或删除)事件 // 将大容器中的所有图片路径, 生成到绑定的 input 中 $(".pup-image-box").on('DOMSubtreeModified', function (e) { // pup-image-box 对象 var $_that = $(this); // 找到绑定的 input var _i = $_that.siblings(".pup-input"); var _content = "" // 获取容器中所有图片 $_that.find('img').each(function (index, element) { // 多图之间用 | 号来分割 _content += (index == 0 ? "" : "|") + $(this).attr("src"); }); // 图片路径组生成到 input 中 _i.val(_content).change(); }); }) /* * 初始化所有图片上传控件 */ function initAllUploader() { $(".pup-main").each(function (index, element) { var obj = $(this); // 上传图片的按钮 var _b = obj.attr("plup-btn"); // 是否多图上传 var _m = obj.attr('plup-mutil') != undefined; // 实例化 initUploader(obj, _b, _m); }) } /* * 将标签实例化为一个图片的上传器 * @param {object} 要实例化的dom对象 * @param {string} 打开文件上传窗口的按钮的Id * @param {mutil} 是否是多图上传 */ function initUploader(obj, btn, mutil) { obj.pluploadQueue({ runtimes: 'html5', browse_button: btn, url: "/File/Uploader", // 唯一名命名 unique_names: true, // 是否多图上传 multi_selection: mutil, chunk_size: "1mb", filters: { mime_types: [{ title: "Image files", extensions: "jpg,gif,png" }], // 是否限制上传重复图片 prevent_duplicates: false }, // 最大重试次数 max_retries: 0, init: { FilesAdded: function (uploader, files) { // 一加入文件就自动上传 uploader.start(); }, FileUploaded: function (uploader, file, responseObject) { // 获取响应对象 response = jQuery.parseJSON(responseObject.response); // 文件地址 var _p = response.path; // image 大容器 var _b = obj.parent().find('.pup-image-box'); // 根据路径生成 图片 var _c = _html(_p); // 如果是单图上传, 则使用替换 // 如果是多图上传, 则附加在图片容器后面 mutil ? _b.append(_c) : _b.html(_c); }, UploadComplete: function (uploader, files) { $(".plupload_upload_status").hide(); $(".plupload_buttons").show(); // 图片传送完成 可以继续上传其他图片 uploader.disableBrowse(false); }, Error: function (uploader, errObject) { }, }, }); }
var uploadPath = ServerHelper.GetWenzhangTitleImgPath(); chunk = chunk ?? 0; using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append)) { var buffer = new byte[fileUpload.InputStream.Length]; fileUpload.InputStream.Read(buffer, 0, buffer.Length); fs.Write(buffer, 0, buffer.Length); } using (var db = new P2PDBContext()) { var imgurl = db.WebInfos.FirstOrDefault().ServerImgUrl; return Content(imgurl + ServerHelper.GetWenzhangTitleImgWebLink(name), "text/plain"); }


浙公网安备 33010602011771号