0

PLUploadフレームワークを使用して、複数のファイル選択を実装しました。

Request.Filesモデルに渡すコントローラーを取得することは可能ですか (ファイルが処理されます)。

ページからすべてのタグをRequest.Files自動的に取得することを知っています。input type='file'

どのような回避策が必要ですか?

フォームを送信する前にファイルをアップロードしたくありません。フォームを送信すると、アップロードがそのまま続行されます。

例: 2 つのファイルを選択した後、HTML コードに次のタグがあります。

<div id="filelist">
  <div id="p17lu3r33g14jk1dg31u0dg1l1lll3">test.xml (272 KB) <b></b></div>
  <div id="p17lu3r33h9mt2oiel81l5t17iq4">abcde.xml (272 KB) <b></b></div>
</div>

アップローダ フォームの HTML コードは次のとおりです。

<div id="upload-container">
   <div>
      <a id="pickfiles" href="#">Select files</a>      
      <a id="uploadfiles" href="#">Upload selected files</a>
   </div>
   <div>
      <div id="filelist">
      </div>
   </div>
</div>
4

1 に答える 1

4

たとえば、ファイル入力の名前が であると仮定するとfiles、次のコントローラー アクションを使用できます。

[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    ....
}

またはビューモデルを定義します:

public class MyViewModel
{
    public IEnumerable<HttpPostedFileBase> Files { get; set; }
}

その後:

[HttpPost]
public ActionResult Upload(MyViewModel model)
{
    ....
}

ここでも、入力ファイルに同じ名前を付けることが重要です。例えば:

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

アップデート:

PLUploadプラグインを使用したいようです。このプラグインは各ファイルを個別に送信し、チャンクを使用します。サーバーでアップロードを処理する方法の例を次に示します。

[HttpPost]
public ActionResult Upload(int? chunk, string name)
{
    var fileUpload = Request.Files[0];
    var uploadPath = Server.MapPath("~/App_Data");
    chunk = chunk ?? 0;
    using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append))
    {
        var buffer = new byte[fileUpload.InputStream.Length];
        fileUpload.InputStream.Read(buffer, 0, buffer.Length);
        fs.Write(buffer, 0, buffer.Length);
    }
    return Json(new { message = "chunk uploaded", name = name });
}
于 2013-03-18T06:59:52.617 に答える