【问题标题】:How to store files that have the same signature but contain different data using asp.net FileUpload control如何使用asp.net FileUpload控件存储具有相同签名但包含不同数据的文件
【发布时间】:2017-03-26 16:37:08
【问题描述】:

我正在使用 ASP.NET FileUpload 控件将文件上传到服务器并存储它。

在我的情况下,上传的文件应该有一个.doc.docx 扩展名,否则会提供错误消息。

   if (fileUpload1.HasFile)
   {
       string fileExtension = Path.GetExtension(fileUpload1.FileName);

       if (fileExtension.ToLower() == ".doc" || fileExtension.ToLower() == ".docx")
       {
              fileUpload1.SaveAs(Server.MapPath("~/Uploads/" + fileUpload1.FileName));
              statusLabel.Text = "File Uploaded Successfully";
              statusLabel.ForeColor = System.Drawing.Color.Green;
       }
       else
       {
              statusLabel.Text = "Only files with .doc or .docx extension are allowed!";
              statusLabel.ForeColor = System.Drawing.Color.Red;
       }
}

当我上传文件并点击上传按钮时,它将存储在我项目的以下目录中:

~/Uploads/

假设我上传了一个包含一些数据的 doc 文件 (test.docx)。会成功上传到服务器并保存在项目目录中==>~/Uploads/

但问题是,当我再次尝试上传具有相同签名(test.docx)但内容不同的文件时,它上传成功,但在项目Uploads 目录中,以前的文件将被删除,只有新文件将呈现。但我想保留这两个文件。

我该如何解决这个问题?

【问题讨论】:

  • 永远不要使用用户输入(如文件名),因为文件名是 OS。您可以使用任何内部名称,最简单的是 DateTime.UtcNow 或 Guid.NewGuid + 如果您愿意,可以通过数据库将其映射到用户的文件名

标签: c# asp.net file-upload


【解决方案1】:

正如 Lanorkin 建议的那样,您需要创建一种方法来重命名文件,然后将其保存到目录中。

因此,在您的代码中包含为文件创建唯一名称的方法:

var FileExtension = Path.GetExtension(FileUpload1.PostedFile.FileName).Substring(1); 

fileUpload1.SaveAs(Server.MapPath("~/Uploads/" + Guid.NewGuid().ToString("N") + "." + FileExtension);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多