多个图片上传mvc4

时间:2014-05-06 16:58:43

标签: c# asp.net-mvc asp.net-mvc-4 file-upload iis-8

我在IIS8.0上使用MVC4将多个图像文件发送到服务器。这已经工作了很长时间,但最近应用程序需要更改保存图像的位置。之前,我正在保存到网络位置,现在我直接保存到运行应用程序的同一个Web服务器。

现在当我上传时只保存一个文件。特别是列表中的最后一个文件。

为什么现在发生这种情况?此外,我可以在localhost上运行该应用程序,它将所有图像保存到Web服务器就好了。一旦我发布并尝试它,它就会开始只拍摄最终图像。

来自HTML:

<form id="inputForm" method="post" action="../images/Create" enctype="multipart/form-data">

<div id="uploadList">
  <input type="file" name="files" id="file1" accept=".jpg,.png,.gif" />
  <input type="file" name="files" id="file2" accept=".jpg,.png,.gif" />
  <input type="file" name="files" id="file3" accept=".jpg,.png,.gif" />
  <input type="file" name="files" id="file4" accept=".jpg,.png,.gif" />
  <input type="file" name="files" id="file5" accept=".jpg,.png,.gif" />
  <input type="file" name="files" id="file6" accept=".jpg,.png,.gif" />
</div>

以下是web.config中的一些行。

  <system.web>     
     <httpRuntime targetFramework="4.5" maxRequestLength="1048576" executionTimeout="3600" />
  </system.web>
<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="1073741824" />
  </requestFiltering>
</security>

来自Controller。

[HttpPost]
public ActionResult Create(IEnumerable<HttpPostedFileBase> files, string serial)

//... Other stuff

foreach (var file in files)
{
    if (file != null)
    {
        if (file.ContentType == "image/jpeg" || file.ContentType == "image/png" || file.ContentType == "image/gif")
        {
            var fileName = Path.GetExtension(file.FileName);
            string result = fileName.AppendTimeStamp();
            var path = Path.Combine((Server.MapPath("~/adpear\\") + storageLoc + "\\" + theUserCompany + "\\" + serial), (serial + "_" + result));
            file.SaveAs(path);
            theSavedImageCount++;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

检查服务器上的path变量,我认为所有文件都是一样的。如果你有相同的路径变量,那么所有文件将相互覆盖,最后你最后得到最后一个文件。

我还建议您尝试以下逻辑 -

    var fileName = Path.GetExtension(file.FileName);
    string currentDate = DateTime.Now.ToString("yyyyMMddHHmmssfff");

    // You can change this string.format as per your requirement
    // Probably you can use Guid here with proper format.
    string result = String.Format("{0}_{1}",currentDate, fileName);
    var path = Path.Combine((Server.MapPath("~/adpear\\") + storageLoc + "\\" + theUserCompany + "\\" + serial), (serial + "_" + result));
    file.SaveAs(path);
    theSavedImageCount++;