2009-10-22 117 views
7

我試圖在MVC中上傳文件。我在SO上看到的大多數解決方案都是使用webform。我不想使用它,並且個人喜歡使用流。你如何在MVC上實現RESTful文件上傳?謝謝!MVC中的文件上傳

回答

13

編輯:而當你認爲你有這一切想通了,你意識到有一個更好的方法。退房http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

原文: 我不知道,我明白你的問題100%,但我認爲你要上傳文件到一個URL,看起來像HTTP:// {服務器名稱}/{}控制器/上傳?這將與使用Web表單的正常文件上傳完全相同。

所以,你的控制有一個名爲上傳動作,看起來與此類似:

//For MVC ver 2 use: 
[HttpPost] 
//For MVC ver 1 use: 
//[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Upload() 
{ 
    try 
    { 
     foreach (HttpPostedFile file in Request.Files) 
     { 
      //Save to a file 
      file.SaveAs(Path.Combine("C:\\File_Store\\", Path.GetFileName(file.FileName))); 

      // * OR * 
      //Use file.InputStream to access the uploaded file as a stream 
      byte[] buffer = new byte[1024]; 
      int read = file.InputStream.Read(buffer, 0, buffer.Length); 
      while (read > 0) 
      { 
       //do stuff with the buffer 
       read = file.InputStream.Read(buffer, 0, buffer.Length); 
      } 
     } 
     return Json(new { Result = "Complete" }); 
    } 
    catch (Exception) 
    { 
     return Json(new { Result = "Error" }); 
    } 
} 

在這種情況下,我回到JSON來表示成功,但你可以改變這XML(或任何爲此事)如果需要的話。

+0

而且,顯然總是確保你不只是接受來自用戶的任何舊垃圾。在您信任它之前,最小檢查將是內容類型,擴展名並通過病毒掃描程序運行。 :) – ZombieSheep 2009-10-22 08:55:15

+0

不同的是,ZombieSheep,你需要檢查客戶端在服務器端發送的一切,即使你已經在客戶端進行了驗證,但所有「生產準備」的東西阻礙了你正在嘗試的點演示。 – Geoff 2009-10-22 09:05:19

+0

謝謝!但這就是我目前使用的方式。我不想在服務器上保存任何文件,因爲它會污染服務器。 – Roy 2009-10-22 09:05:20

0
public ActionResult register(FormCollection collection, HttpPostedFileBase FileUpload1){ 
RegistrationIMG regimg = new RegistrationIMG(); 
string ext = Path.GetExtension(FileUpload1.FileName); 
string path = Server.MapPath("~/image/"); 
FileUpload1.SaveAs(path + reg.email + ext); 
regimg.Image = @Url.Content("~/image/" + reg.email + ext); 
db.SaveChanges();}