2011-05-02 58 views
1

我想知道如何上传文件与asp.net mvc 3和plupload插件如何使用plupload和asp.net mvc 3上传文件?

我试过HttpPostedFileBase,但它似乎总是空;

我发现这个page但如果是asp.net的MVC 3

新的方式,我也不能100%确定是什么在这是怎么回事,我不知道。它实际上是否将文件保存到服务器(App_data),因为我不想要这个。我试图上传icals,然后从icals中提取这些值并将它们导入到db中。

然后摆脱文件。所以我宁愿不保存到服务器,如果有必要。

回答

1

确保您的表单包含enctype = "multipart/form-data"

@using (Html.BeginForm("upload", "home", FormMethod.Post, 
    new { enctype = "multipart/form-data" })) 

,让您的输入名称

<input type="file" name="file" /> 

控制器上

public ActionResult Upload(HttpPostedFileBase file) 
+1

权这将是一个参数文件。那么HttpPostedFileBase是否等待所有的块到达?或者我会得到不完整的文件?我也想知道是否有一次发送所有的文件(比如说,如果我上传3个文件,它一次发送3个文件)?我会不得不禁用多个chuncking或什么?我试图为HttpPostedFileBase做一个集合,但是没有做任何事情,因为我认为它一次发送一个。 – Sharpoint 2011-05-02 15:59:49

1

看看这里的一样:

$("#uploader").pluploadQueue({ 
     // General settings 
     runtimes: 'silverlight', 
     url: '/Home/Upload', 
     max_file_size: '10mb', 
     chunk_size: '1mb', 
     unique_names: true, 
     multiple_queues: false, 

     // 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!"; 
     } 

这一切......需要在控制器中没有大块......

+0

如果文件大于1mb,则需要分块。 .NET会抛出'超过最大请求长度。' – ppumkin 2014-05-15 19:44:47

+0

为什么你将它设置为false'multiple_queues:false',如果需要上传多个文件并且相应地服务器端方法代码需要不同以处理多个文件,则它必须为true。谢谢 – Thomas 2015-06-24 12:42:44