2

Asp.Net MVC-4 のプロジェクトに取り組んでいます。私のプロジェクトでは、ユーザー投稿の要件があります。投稿には、タイトルタグファイルなどが含まれます。ファイルは複数にすることができ、ビデオ、ドキュメント (ppt、Excel、PDF など)、画像などの任意のタイプにすることができます。

私の問題は、複数のファイルのアップロードの処理です。今、最初に私はあなたに言います

現在、私はこれをどのように処理していますか:

Jquery FILE Uplaodプラグインを使用しています。このプラグインを介して、ファイルをサーバーに順次アップロードし、サーバー上でそれらのファイルをSessionIdで保存しています。ユーザーが要求フォームに投稿すると、それらのファイルの名前をuserIdで変更するだけです。

私のアプローチの欠点

まず、これらのファイルをセッション ID で保存する必要があります。さらに、userId で名前を変更する必要があります。したがって、単一のファイルをアップロードする場合よりも、ファイルを Window Azure Blob に保存する場合は、2 つのトランザクションを実行する必要があります。まず、SessionId を使用して BLOB を保存し、ユーザー ID を使用して BLOB の名前を変更します。これは、余分な処理と余分なコストをもたらすと思います。

ここで、フォーム投稿ですべてのファイルをアップロードできる方法があるかどうかを知りたいです (個々のファイルの進行状況バー [必須] )。そのため、すべてのファイルを含むユーザーの要件フォーム (タグ、タイトルなど) が一緒にサーバーに送信されるようにするには、最初にユーザーをデータベースに保存し、ユーザー ID を使用してファイルを保存します ??

注: ファイルをguidなどで保存できません。ユーザーのファイルを一意に識別するために、ファイル名に UserId が必要です。

4

2 に答える 2

1

コントローラーで次のコードを使用してアップロードできます

[HttpPost]
public ActionResult Index(IEnumerable<HttpPostedFileBase> files) {
  foreach (var file in files) {
    if (file.ContentLength > 0) {
      var fileName = Path.GetFileName(file.FileName);
      var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
      file.SaveAs(path);
    }
  }
  return RedirectToAction("Index");
}

詳細はこちら

于 2013-10-29T10:11:28.637 に答える
0

質問を完全に理解しているかどうかはわかりませんが、ユーザーの詳細のモデルをファイルのアップロードと同じ POST (同じフォームですか?) に投稿してから、サーバーに投稿できます。

    [HttpPost]
    public JsonResult AddNewImage(UserModel user)
    {
        ReturnArgs r = new ReturnArgs();
        repo.AddUser(user) // add your user to DB here

        SaveImages(user.Id);
        r.Status = 200;
        r.Message = "OK!";

        return Json(r);
    }

    private void SaveImages(string userid)
    {
        for (var i = 0; i < Request.Files.Count; i++)
        {
            var file = Request.Files[i] as HttpPostedFileBase;
            string fileName = userid + "_" + i;

            // saving file to DB here, but you can do what you want with
            // the inputstream

            repo.SaveImage(fileName, file.InputStream, file.ContentType);
        }
    }
于 2013-09-11T09:37:29.040 に答える