2009-10-22 24 views
7

MVC içinde dosya yüklemeye çalışıyorum. SO üzerinde gördüğüm çoğu çözüm, webform kullanıyor. Bunu kullanmak istemiyorum ve akarsuları kullanmayı tercih ederim. MVC'de RESTful dosya yükleme nasıl yapılır? Teşekkürler!Dosya yükleme MVC

cevap

13

Düzenleme: Ve tüm bunları düşündüğünüzde, daha iyi bir yol olduğunu anladığınızı anlarsınız. http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

Orjinal göz atın: ben senin soru% 100 anladığımdan emin değilim, ama ben http şuna benzer bir URL'ye bir dosya yüklemek istediğinizi varsayalım: // {sunucu adı}/{Kontrolör}/yükle? Bu, web formlarını kullanarak normal bir dosya yüklemesi gibi uygulanacaktır. Ben Json başarıyı göstermek için dönüyorum Bu durumda

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

ancak (ya da bu konuda herhangi bir şey) xml olarak değiştirebilirsiniz:

Yani denetleyici bir eylem adında yükleme vardır ve şuna benzer gerekirse.

+0

Ve açıkça, HER ZAMAN bir kullanıcının eski bir önemsizini kabul etmediğinizden emin olun. Minimum çek, içerik türü, uzantıdır ve ona güvenmeden önce bir virüs tarayıcısı üzerinden çalıştırır. :) – ZombieSheep

+0

Vary true, ZombieSheep, istemciyi doğrulamış olsanız bile, istemcinin sunucu tarafında gönderdiği HERKESİNİ kontrol etmelisiniz, ancak "üretim hazır" şeyleri denediğiniz noktaya ulaşır. göstermek. – Geoff

+0

Teşekkürler! Ama şu an kullandığım yol bu. Sunucudaki herhangi bir dosyayı kaydetmek istemiyorum çünkü sunucu kirletecektir. – Roy

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();}