2009-03-03 22 views
5

私はあなたの答えに、可能な限り記述してください、ASP.net MVCに非常に新しいです:)アップロード複数の画像+ ASP.NET MVCのテキストフィールド

私はしようとしているものを簡素化してみましょう行う。私はあなたが車に関するいくつかの情報を入力したいと思うフォームを持っていると想像してください。フィールドは、Make、Model、Year、Image1、Image2のいずれかです。

フォームの下部には、[保存]ボタンがあります。関連するコントローラメソッドは、Image1とImage2をディスクに保存し、ファイル名を取得して車のモデルに関連付け、データベースに保存します。

アイデア?

ありがとうございました!

編集

winob0tそこに道のほとんどを私を得ました。未解決の問題は次のとおりです。Image1とImage2は必須フィールドではないため、0,1,2イメージを保存できます。ユーザーが1枚の画像しかアップロードしない場合、imageUpload1かimageUpload2かどうかを知る方法がありません。

再度、お手数ですがご了承ください!あなたのようにアップロードされたファイルにアクセスすることができ、あなたのコントローラで

答えて

7

if(Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) { 
     HttpPostedFileBase postFile = Request.Files.Get(0); 
     string filename = GenerateUniqueFileName(postFile.FileName); 
     postFile.SaveAs(server.MapPath(FileDirectoryPath + filename)); 
    } 

protected virtual string GenerateUniqueFileName(string filename) { 

    // get the extension 
    string ext = Path.GetExtension(filename); 
    string newFileName = ""; 

    // generate filename, until it's a unique filename 
    bool unique = false; 

    do { 
     Random r = new Random(); 
     newFileName = Path.GetFileNameWithoutExtension(filename) + "_" + r.Next().ToString() + ext; 
     unique = !File.Exists(FileDirectoryPath + newFileName); 
    } while(!unique); 
    return newFileName; 
} 

テキストフィールドは、[...]すなわちのRequest.Form通常通りお使いのコントローラのアクションに到着します。また、フォームのenctypeを "multipart/form-data"に設定する必要があることに注意してください。残りの作業を行うには、ASP.NET MVCについて十分理解しているようです。また、aspxビューではフォームタグを次のように宣言できますが、必要に応じてより伝統的なアプローチを使用することもできます。

<% using(Html.BeginForm<FooController>(c => c.Submit(), FormMethod.Post, new { enctype = "multipart/form-data", @id = formId, @class = "submitItem" })) { %> 

<% } %> 
+0

あなたは私のところに途中にいます! Image1とImage2の存在は保証されていません。では、ユーザーがImage2のみを提供し、Image1は提供しない場合はどうなりますか?どのアップロードコントロールから来たのか知る方法はありますか? Request.Files ["formInputname"] –

+0

の代わりにRequest.Files [ ) – LaserJesus

+0

if(Request.Files ["formInputname"]!= null && Request.Files ["formInputname"]。ContentLength> 0の場合は、 – LaserJesus

1

私の解決策ですが、上記の答えは私の状況ではうまくいきませんでした。フォームの詳細については何も気にせず、複数のアップロードを許可します。

for (int i = (Request.Files.Count - 1); i >= 0; i--) 
    { 
      if (Request.Files != null && Request.Files[i].ContentLength > 0) 
      { 
       string path = this.Server.MapPath("~/Content/images/"); 
       string filename = Path.GetFileName(Request.Files[i].FileName); 
       string fullpath = Path.Combine(path, filename); 
       Request.Files[i].SaveAs(fullpath); 
      } 
    } 
関連する問題