在MVC3中使用plupload

问题描述

| 因此,我已经在MVC3中使用Flash运行时实现了plupload。 从使用校正Action上传并全部运行的意义上说,它可以完美运行。但是,我真的很希望能够控制响应并在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\'
},
然后在服务器上执行一些修改以创建正确的会话。     ,看这里:
$(\"#uploader\").pluploadQueue({
         // General settings
         runtimes: \'silverlight\',url: \'/Home/Upload\',max_file_size: \'10mb\',// Resize images on clientside if we can
         resize: { width: 320,height: 240,quality: 90 },// Specify what files to browse for
         filters: [
            { title: \"Image files\",extensions: \"jpg,gif,png\" },{ title: \"Zip files\",extensions: \"zip\" }
        ],// Silverlight settings
         silverlight_xap_url: \'../../../Scripts/upload/plupload.silverlight.xap\'
      });

      // Client side form validation
      $(\'form\').submit(function (e) {
         var uploader = $(\'#uploader\').pluploadQueue();

         // Files in queue upload them first
         if (uploader.files.length > 0) {
            // When all files are uploaded submit form
            uploader.bind(\'StateChanged\',function () {
               if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
                  $(\'form\')[0].submit();
               }
            });

            uploader.start();
         } else {
            alert(\'You must queue at least one file.\');
         }

         return false;
      });
在控制器中:
[HttpPost]
public string Upload(  ) {
          HttpPostedFileBase FileData = Request.Files[0];

          if ( FileData.ContentLength > 0 ) {
             var fileName = Path.GetFileName( FileData.FileName );
             var path = Path.Combine( Server.MapPath( \"~/Content\" ),fileName );
             FileData.SaveAs( path );
          }

          return \"Files was uploaded successfully!\";
       }
仅此而已...在Controller中不需要块...