Sto tentando di caricare file in MVC. La maggior parte della soluzione che ho visto su SO è l'uso di webform. Non voglio usarlo e preferisco personalmente usare i flussi. Come implementate il caricamento di file RESTful su MVC? Grazie!Caricamento file in MVC
7
A
risposta
13
Modifica: E proprio quando pensi di aver capito tutto capisci che c'è un modo migliore. Scopri http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx
originale: Non sono sicuro che ho capito la tua domanda al 100%, ma suppongo che si desidera caricare un file a un URL che sembra qualcosa di simile http: // {nome server}/{controller}/Carica? Questo sarebbe implementato esattamente come un normale caricamento di file usando i moduli web.
Quindi il controller ha un nome di upload azione ed è simile a questo:
//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" });
}
}
In questo caso sto tornando JSON per indicare il successo, ma è possibile modificare questo per XML (o qualsiasi cosa per quella materia) se necessario.
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();}
E, ovviamente, assicurarsi SEMPRE che non si stia semplicemente accettando la posta indesiderata di un utente. Il controllo minimo dovrebbe essere il tipo di contenuto, l'estensione ed eseguirlo tramite uno scanner di virus prima di considerarlo affidabile. :) – ZombieSheep
Vary true, ZombieSheep, devi controllare TUTTO ciò che un client invia sul lato server, anche se hai convalidato sul client, ma tutta la roba "produzione pronta" interferisce con il punto che stai cercando di dimostrare. – Geoff
Grazie! Ma è così che uso al momento. Non voglio salvare alcun file sul server perché inquinerà il server. – Roy