1

ユーザーが別々の input type="file" フィールドに投稿する可能性のあるファイルを分離するのに問題があります。私が試してみました:

var UploadedPicture = Request.Files[0];
    if(Path.GetFileName(UploadedPicture.FileName) != String.Empty)
    {
        var ContentType = UploadedPicture.ContentType;
        var ContentLength = UploadedPicture.ContentLength;
        var InputStream = UploadedPicture.InputStream;
        Session["gMugshot"] = new byte[ContentLength];
        InputStream.Read((byte[])Session["gMugshot"], 0, ContentLength);
    }
    else
    {
        Session["gMugshot"] = new byte[0];
    }

しかし、それは1つのファイルしか取得しません。私が試してみました

foreach (HttpPostedFile postedFile in Request.Files)
        {
            int contentLength = postedFile.ContentLength;
            string contentType = postedFile.ContentType;
            string fileName = postedFile.FileName;

            postedFile.SaveAs(@"c:\test\file" + index + ".tmp");
        } 

    }

しかし、それはそれらを分離しません(また、ファイルを保存したくありません。データベースに保存したいだけですが、その部分は問題ありません)。それぞれ別々のデータベース フィールドに入る必要があります。単一の画像でこれを機能させることができますが、複数の画像で機能する方法がわかりません。可能であれば、ヘルパーinput type="file"ではなくフィールドで作業したいと考えています。FileUpload.GetHtml(initialNumberOfFiles:1, allowMoreFilesToBeAdded:false, includeFormTag:false)

入力要素のIDで取得することはできますか?

4

1 に答える 1

2

ページに複数の input type=file 要素を追加すると、アップロードされたファイルは Request.Files コレクションで使用できます。コードが示すようにそれを繰り返し、コレクション内の各ファイルに対して好きなアクションを実行できます。

if(Request.Files.Count > 0){
    foreach(var file in Request.Files){
        ...
    }
}

特定の目的で異なる入力タイプ = ファイルがある場合は、name 属性を指定することでそれらを識別できます。

<input type=file name="file1" />
<input type=file name="file2" />
<input type=file name="file3" />

name 属性の値は、文字列の配列であるRequest.Files.AllKeysで使用できるため、各項目をインデックスで参照できます。

if(IsPost && Request.Files.Count > 0){
    var file3 = Request.Files[Array.IndexOf(Request.Files.AllKeys, "file3")];
    if(file3.ContentLength > 0){
        //there is a file there
    }
}
于 2012-10-25T08:23:41.623 に答える