我有以下代码(我还在开发它),它成功地将文件上传到所需的路径。
private async Task AddImage(IFormFile image, string filePath)
{
List<string> PermittedFileTypes = new List<string> {
"image/jpeg",
"image/png",
};
if (PermittedFileTypes.Contains(image.ContentType)) {
// HERE I WILL CHECK NAME AND CHANGE IF IT ALREADY EXSISTS
using (var stream = new FileStream(Path.Combine(filePath, image.FileName), FileMode.Create))
{
await image.CopyToAsync(stream);
}
}
}
我遇到的问题是,文件试图以相同的名称上传(显然会出现错误),但文件不同。所以我想检查文件是否存在,如果它确实改变了文件的名称,可能会在最后添加一个&#34; _#),然后在新名称下再次上传文件。问题是IFormFile.FileName仅用于get,我无法设置文件名。
在线查看我看到人们建议将文件复制到新名称,但由于文件无法上传,我无法做到。任何帮助表示赞赏!
答案 0 :(得分:3)
您可以使用Path.Combine(filePath, Guid.NewGuid() )
代替Path.Combine(filePath, image.FileName)
来保证文件名是唯一的。
答案 1 :(得分:0)
下面的代码片段可能会有所帮助,我只是在创建流时使用了不同的文件名“thefile”。
public async Task<dynamic> AddFile(IFormFile FormFile, string thefile="newfilename.png", string filePath= @".\DocumentStoredHere\")
{
try
{
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
using (var stream = System.IO.File.Create(thefile))
{
await FormFile.CopyToAsync(stream);
}
return true;
}
catch (System.Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}