2

我正在做一个 Asp.Net MVC-4 项目。在我的项目用户发布要求中。帖子包含标题标签文件等。文件可以是多个,并且可以是任何类型,如视频、文档(ppt、excel、pdf 等)、图像等。

我的问题是处理多个文件上传。现在首先我告诉你

目前我如何处理这个

我正在使用Jquery 文件上传插件。通过这个插件,我按顺序将文件上传到服务器,并在服务器上用SessionId保存这些文件。现在,当用户在那里发布需求表单时,我只是用 userId 重命名这些文件。

我的方法的缺点

首先,我必须使用会话 ID 保存这些文件,然后我必须使用 userId 重命名它。因此,如果我将文件保存在 Window Azure Blobs 中,而不是在那种情况下上传单个文件,我必须执行 2 次事务。首先使用 SessionId 保存 blob,然后使用 userid 重命名 blob。我认为这会导致额外的处理和额外的成本。

现在我想知道是否有任何方法可以通过表单发布上传所有文件(带有单个文件的进度条[必需] )。因此,所有文件的用户需求表单(标签、标题等)一起发送到服务器,而不是在这种情况下,我将首先将用户保存在数据库中,然后我将使用 userId 保存文件?

注意: 我无法使用 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 回答