2009-10-22 11 views
7

MVC内でファイルをアップロードしようとしています。私がSOで見たほとんどの解決策はウェブフォームを使用しています。私はそれを使いたくないし、個人的にストリームを使うことを好みます。 RESTfulなファイルアップロードをMVCに実装するにはどうすればよいですか?ありがとう!MVCでのファイルアップロード

答えて

13

編集:あなたが思っていたときには、すべてがわかっていると、より良い方法があることに気づくでしょう。 http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

オリジナルチェックアウト: 私は私があなたの質問に100%を理解していることを確認していないが、私はあなたがHTTPのようになりますURLにファイルをアップロードすることを想定:// {サーバ名}/{コントローラ} /アップロード?これは、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

+0

ZombieSheepを真偽に変更します。クライアントで検証されたとしても、クライアントがサーバー側で送信するすべてのデータをチェックする必要がありますが、すべての「プロダクション準備完了」のものは、実証する。 – Geoff

+0

ありがとう!しかし、それは私が現在使っている方法です。サーバーを汚染するので、サーバーにファイルを保存したくありません。 – 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();} 
関連する問題