0

複数のファイルをアップロードして、ビューで繰り返し処理しようとしています。ただし、X 個のファイルをアップロードするのではなく、最初のファイル X を何度もアップロードします (たとえば、3 つのファイルをアップロードした場合は 3 回)。宛先フォルダーには、単一のファイルのみが保存されます。

存在するファイルの数を認識しているように見えるのに、なぜそれらを繰り返し処理しないのですか?

私はasp.net/c#にかなり慣れていない(classic/vbに慣れている)ので、明らかな何かが欠けている場合は申し訳ありません...

コード:

public class ViewDataUploadFilesResult
{
    public string Name { get; set; }
    public int Length { get; set; }
}


public ActionResult UploadMultipleFiles()
{
    var r = new List<ViewDataUploadFilesResult>();


    foreach (string file in Request.Files)
    {
        HttpPostedFileBase hpf = Request.Files[file];//as HttpPostedFileBase;
        if (hpf.ContentLength == 0)
            continue;

        string basepath = Server.MapPath("/Images");
        string savedFileName = Path.Combine(basepath, Path.GetFileName(hpf.FileName));

        hpf.SaveAs(savedFileName);


        r.Add(new ViewDataUploadFilesResult()
        {
            Name = savedFileName,
            Length = hpf.ContentLength
        });
    }          
    return View(r);
}

結果の例:

    <li>Uploaded: C:\Users...sonatrach.jpg totalling 3581 bytes.</li>
    <li>Uploaded: C:\Users...sonatrach.jpg totalling 3581 bytes.</li>
    <li>Uploaded: C:\Users...sonatrach.jpg totalling 3581 bytes.</li>

私はここで Scott Hanselman の投稿に取り組んでいます:

4

2 に答える 2

0

おそらくあなたが探していた答えではありませんが、私は別のアプローチをお勧めします。そのブログ投稿はかなり古いです。複数ファイルのアップロードを行うためにpluploadjqueryプラグインを使用します。非常に使いやすく、実装も非常に簡単です。これは、MVCを使用して実装する方法に関する別の質問に投稿された例です。この例では、アップロードしようとしているファイルごとにUploadメソッドが呼び出されます。

MVC3でpluploadを使用する

お役に立てば幸いです。

于 2013-01-07T00:17:41.793 に答える
-1

これはあなたの質問に答えないかもしれませんが、ファイルをアップロードする別の方法です。

これを試して:

[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    if (files != null && files.Count() > 0)
    {
        foreach (var uploadedFile in files)
        {
            if (uploadedFile.ContentType != "image/vnd.dwg") 
            {
                return RedirectToAction("List");
            }

            var appData = Server.MapPath("~/app_data");
            var filename = Path.Combine(appData, Path.GetFileName(uploadedFile.FileName));
            uploadedFile.SaveAs(filename);                    
        }
    }

    return RedirectToAction("Success");
}

ファイル入力がfilesという名前になるようにマークアップを変更します。

<input type="file" name="files" />
<input type="file" name="files" />
...// many inputs type file

「DarinDimitrovによる元の投稿」、リンク:C#およびMVC3でのHttpFileCollectionBaseの問題を使用して複数のファイルをアップロードする

于 2013-01-07T00:49:08.157 に答える