5

私はASP.net MVCに非常に慣れていないので、答えをできるだけ説明してください:)

私がやろうとしていることを簡単にしましょう。車に関する情報を入力するフォームがあるとします。フィールドは次のようになります: Make、Model、Year、Image1、Image2。

フォームの下部に「保存」ボタンがあります。関連付けられた Controller メソッドは、Image1 と Image2 をディスクに保存し、それらのファイル名を取得して、データベースに保存される車のモデルに関連付けます。

何か案は?

みんなありがとう!

編集

winob0tは私をそこに連れて行ってくれました。唯一の未解決の問題は次のとおりです。Image1 と Image2 は必須フィールドではないため、0、1、または 2 つの画像を保存できるようになりました。しかし、ユーザーが画像を 1 枚だけアップロードした場合、それが imageUpload1 からのものか imageUpload2 からのものかを知る方法はありません。

繰り返しますが、どんな助けでも大歓迎です!

4

2 に答える 2

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.NETMVCについて十分に理解しているようです。次のようにaspxビューでフォームタグを宣言できることにも注意してください。ただし、必要に応じて、より従来のアプローチを使用することもできます。

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

<% } %>
于 2009-03-03T00:58:25.160 に答える
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);
           }
     }
于 2012-07-30T06:31:14.393 に答える