所以,我在MVC3中使用flash运行时实现了plupload.
它的工作方式非常完美,因为它使用更正操作上传并运行它.但是,我真的希望能够控制响应,并在plupload中处理它,但我似乎无法得到任何响应.
我已经尝试重写fileUploaded,但我似乎无法从参数中得到任何东西.我试过返回简单的字符串,json和你有什么.我似乎无法在客户端获得任何东西.当然通过flash发送,我甚至无法用firebug调试请求:/
与Error事件相同,并抛出异常.它正确地将异常解释为错误,但它始终是#IO ERROR,其中一些代码如2038或另一端出现.我无法显示我的异常字符串或任何内容.有人可以帮忙吗?
奖金问题:我如何发送会话/ cookie数据以及plupload,所以我可以在我的行动中访问会话?
解决方法
以下对我有用:
[HttpPost] public ActionResult Upload(int? chunk,string name) { var fileUpload = Request.Files[0]; var uploadPath = Server.MapPath("~/App_Data"); 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,buffer.Length); fs.Write(buffer,buffer.Length); } return Json(new { message = "chunk uploaded",name = name }); }
在客户端:
$('#uploader').pluploadQueue({ runtimes: 'html5,flash',url: '@Url.Action("Upload")',max_file_size: '5mb',chunk_size: '1mb',unique_names: true,multiple_queues: false,preinit: function (uploader) { uploader.bind('FileUploaded',function (up,file,data) { // here file will contain interesting properties like // id,loaded,name,percent,size,status,target_name,... // data.response will contain the server response }); } });
就奖金问题而言,我愿意通过不使用会话来回答它,因为它们不能很好地扩展,但因为我知道你可能不喜欢这个答案你有可能通过一个会话使用multipart_params在请求中的id:
multipart_params: { ASPSESSID: '@Session.SessionID' },
然后在服务器perform some hacks上创建正确的会话.