不要覆盖通过FileUpload控件上传的文件

使用以下代码:

protected void Button1_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { string fileExt = System.IO.Path.GetExtension(FileUpload1.FileName); if (fileExt == ".jpg" || fileExt == ".jpeg" || fileExt == ".gif" || fileExt == ".png") { try { FileUpload1.SaveAs(Server.MapPath("../uploads/originals/" + FileUpload1.FileName)); Label1.Text = "File name: " + FileUpload1.PostedFile.FileName + "
" + FileUpload1.PostedFile.ContentLength + " kb
" + "Content type: " + FileUpload1.PostedFile.ContentType; } catch (Exception ex) { Label1.Text = "ERROR: " + ex.Message.ToString(); } } else { Label1.Text = "Only image files are allowed!"; } } else { Label1.Text = "You have not specified a file."; } }

我想这样做,如果文件存在,它会更改它的名称,是否有任何内置function? 经典ASP有一个参数,所以当你上传说house.jpg,然后它将成为house(1).jpg等有用的。

内置任何东西 – 您需要制作自己的算法:

 string path = Server.MapPath("../uploads/originals/" + FileUpload1.FileName); if(!File.Exists(path)) { FileUpload1.SaveAs(path); } else { // figure a different file name, perhaps check for existence as well } 

这也可以构建为一个循环:

 string path = Server.MapPath("../uploads/originals/" + FileUpload1.FileName); while(File.Exists(path)) { // GetAlternatePath generates a new filename based on the path passed in path = GetAlternatePath(path); } FileUpload1.SaveAs(path); 
 var fileName = file.FileName; var extension = Path.GetExtension(fileName); var nameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); var i = 1; while (File.Exists(uploadFolder + fileName)) { fileName = nameWithoutExtension.Trim() + " (" + i + ")" + extension; i++; } file.SaveAs(uploadFolder + fileName); 

您可以使用File static class检查文件是否存在:

 bool exists = System.IO.File.Exists(fileName); 

没有用于向文件名添加(1)的内置方法,但您可以使用System.IO.Path.GetRandomFileName方法获取保证唯一的文件名。如果您不需要文件名本身是可读的然后这可能是有用的。

我有一个小方法,通过在它们上添加(1),(2)等来获取这样的唯一文件名:

 public static string GetUniqueFilename(string folder, string postedFileName) { string fileExtension = postedFileName.Substring(postedFileName.LastIndexOf('.') + 1); int index = 2; while (File.Exists(string.Format("{0}/{1}", folder, postedFileName))) { if (index == 2) postedFileName = string.Format("{0} ({1}).{2}", postedFileName.Substring(0, postedFileName.LastIndexOf('.')), index, fileExtension); else postedFileName = string.Format("{0} ({1}).{2}", postedFileName.Substring(0, postedFileName.LastIndexOf(' ')), index, fileExtension); index++; } return postedFileName; } 

我建议您使用GUID标记文件名,以确保每个文件都具有唯一的名称。

使用原始文件名维护数据库,并在下载文件时将其替换。

如果文件存在,为什么不首先删除文件,然后调用“SaveAs”方法?