如何在存储之前更改文件名

时间:2016-08-18 20:43:10

标签: c# asp.net-mvc

在我的视图中,我允许用户上传简历和可选的求职信。 但是为避免重复,我应该能够更改文件名。下面是我控制器中的代码段。请告知我如何在存储之前更改文件名。

foreach (string upload in Request.Files)
{
    if (Request.Files[upload].ContentLength == 0) continue;
    string pathToSave = Server.MapPath("~/Documents/");
    string filename = Path.GetFileName(Request.Files[upload].FileName);
    Request.Files[upload].SaveAs(Path.Combine(pathToSave, filename));
}

3 个答案:

答案 0 :(得分:5)

您可以使用DateTime值使其唯一

 Request.Files[upload].SaveAs(Path.Combine(pathToSave, DateTime.Now.ToString("yyyy_MM_dd_mm_ss") + "_" + filename));

答案 1 :(得分:4)

当您致电SaveAs时,您可以随意保存。

我经常做这样的事情:

var filename = Guid.NewGuid() + Path.GetExtension(file.FileName);
fullpath = HttpContext.Current.Server.MapPath(fullpath) + filename;
file.SaveAs(fullpath);

其中fileHttpPostedFileBase

答案 2 :(得分:1)

 var formattedFileName = string.Format("{0}-{1}{2}"
            , Path.GetFileNameWithoutExtension(filename)
            , Guid.NewGuid().ToString("N")
            , Path.GetExtension(filename));

如果原始文件名为John.pdf,则会生成John-b3d3d49c60e0426a8e4ff3fabff1c4e9.pdf

这种方法有一些优点:

  • 如果在一秒内上传2个或更多同名文件,则不会发生冲突
  • 您可以按名称
  • 对目录中的文件进行排序