使用以下代码:
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 + "<br>" +
FileUpload1.PostedFile.ContentLength + " kb<br>" +
"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.";
}
}
我想这样做,如果文件存在,它会更改它的名称,是否有任何内置功能?经典ASP有一个参数,所以当你上传说house.jpg,然后它将成为house(1).jpg等有用。
答案 0 :(得分:8)
内置任何内容 - 您需要制作自己的算法:
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);
答案 1 :(得分:4)
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);
答案 2 :(得分:2)
您可以使用File静态类检查文件是否存在:
bool exists = System.IO.File.Exists(fileName);
没有为文件名添加(1)的内置方法,但您可以使用System.IO.Path.GetRandomFileName方法获取保证唯一的文件名。如果您不需要文件名本身是可读的,这可能有用。
答案 3 :(得分:2)
我有一个小方法,通过在它们上添加(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;
}
答案 4 :(得分:0)
我建议您使用GUID标记文件名,以确保每个文件都具有唯一的名称。
使用原始文件名维护数据库,并在下载文件时将其替换。
答案 5 :(得分:0)
如果文件存在,为什么不首先删除文件,然后调用“SaveAs”方法?