2011-08-03 7 views
0

httphandlerファイル(.ashx)を使用してファイルアップローダを使用していましたが、通常の.net web applnで動作していました。今私はMVCでそれを使用しようとしているが、それを行うことはできません。どのような体でも、この問題を解決したり、他の方法で提案したりすることができますか?MVCでハンドラファイルを使用してファイルをアップロード

答えて

1

は、ここでは、のHttpHandler(* .ashx)に頼ることなく、ASP.NET MVCでファイルをアップロードすることができます方法は次のとおりです。

は、あなたが新しいユーザープロファイルを作成したいと仮定しましょう。各プロファイルには名前とプロファイルの画像があります。

1)モデルを宣言します。プロファイル画像にはHttpPostedFileBaseタイプを使用してください。

public class ProfileModel 
{ 
    public string Name { get; set; } 
    public HttpPostedFileBase ProfilePicture { get; set; } 
} 

2)このモデルを使用して、新しいプロファイルを作成するためのフォームを作成します。 enctype = "multipart/form-data"を指定することを忘れないでください。

<% using (Html.BeginForm("Add", "Profiles", FormMethod.Post, 
      new { enctype = "multipart/form-data" })) { %> 
    <%=Html.TextBoxFor(m => m.Name)%> 
    <input type="file" id="ProfilePicture" name="ProfilePicture" />  
    <input type="submit" value="Save" /> 
<% }%> 

3)投稿されたフォームを受け入れるアクションメソッドをコントローラで宣言します。ここでは、アップロードされたファイルを表すストリームにアクセスできます。次のコード例は、ストリームをバイト配列(バッファ)に読み込みます。その後、ファイルをファイルシステム、データベースなどに保存することができます。

[HttpPost] 
public ActionResult Add(ProfileModel model) 
{ 
    if (model.ProfilePicture != null && model.ProfilePicture.InputStream != null) 
    { 
     var filename = model.ProfilePicture.FileName; 

     var buffer = new byte[model.ProfilePicture.InputStream.Length]; 
     model.ProfilePicture.InputStream.Read(buffer, 0, 
      (int) model.ProfilePicture.InputStream.Length); 

     //... 
    } 
} 
関連する問題