Pluploadcss
引用html
<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: {} });
后台html5
/// <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.htmljquery
------------------------------ 一个图片上传器的集成 --------------------------------数组
<!-- 用于打开上传框的按钮, 能够设置在页面任何地方, 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"); }