I'm trying to upload files within MVC. Most solution I saw on SO is use webform. I don't want to use that and personly prefer using streams. How do you implement RESTful file uploading on MVC? Thanks!
Asked
Active
Viewed 1.4k times
2 Answers
13
Edit: And just when you think you have it all figured out you realise that there is a better way. Check out http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx
Original: I am not sure that I understand your question 100%, but I assume that you want to upload a file to a url that looks something like http://{server name}/{Controller}/Upload? This would be implemented exactly like a normal file upload using web forms.
So your controller has an action named upload and looks similar to this:
//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 this case I am returning Json to indicate success, but you can change this to xml (or anything for that matter) if needed.

Geoff
- 4,676
- 3
- 26
- 38
-
And, obviously ALWAYS make sure you aren't just accepting any old junk from a user. Minimum check would be content type, extension and run it through a virus scanner before you trust it. :) – ZombieSheep Oct 22 '09 at 08:55
-
Vary true, ZombieSheep, you need to check EVERYTHING that a client sends on the server side, even if you have validated on the client, but all the "production ready" stuff gets in the way of the point you are trying to demonstrate. – Geoff Oct 22 '09 at 09:05
-
Thanks! But that's the way I use currently. I don't want to save any file on the server because it will pollute the server. – Roy Oct 22 '09 at 09:05
-
@Roy, if you don't want to save a file then use the code after the // * OR * comment – Geoff Oct 22 '09 at 09:07
-
Okay, I will get the stream from the file. Thanks! – Roy Oct 22 '09 at 09:07
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();}

samir
- 396
- 2
- 13