C# System.IO.FileNotFoundException 当文件确实存在时
C# System.IO.FileNotFoundException when file definitely exists
我正在尝试 return 来自 ASP.NET 核心中的操作的文件:
public IActionResult GetFile(string filePath) {
return File("/home/me/file.png", "application/octet-stream");
}
然而,我得到一个
System.IO.FileNotFoundException
在我的浏览器中 window:
An unhandled exception occurred while processing the request.
FileNotFoundException: Could not find file: /home/me/file.png
Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.ExecuteAsync(ActionContext context, VirtualFileResult result)
我试过使用 System.IO.File.Exists
检查文件是否存在并在 Directory.GetFiles
中查找它,两者都说文件确实存在。我也试过将媒体类型更改为 image/png
,但这没有任何帮助。
为什么会出现此错误,我该如何解决?
这是我在一个应用程序中使用的,它完美地工作:
[HttpGet]
[Route("download")]
public async Task<iactionresult> Download([FromQuery] string file) {
var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
var filePath = Path.Combine(uploads, file);
if (!System.IO.File.Exists(filePath))
return NotFound();
var memory = new MemoryStream();
using (var stream = new FileStream(filePath, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
return File(memory, GetContentType(filePath), file);
}
此片段来自 here:我的代码略有不同。
我正在尝试 return 来自 ASP.NET 核心中的操作的文件:
public IActionResult GetFile(string filePath) {
return File("/home/me/file.png", "application/octet-stream");
}
然而,我得到一个
System.IO.FileNotFoundException
在我的浏览器中 window:
An unhandled exception occurred while processing the request. FileNotFoundException: Could not find file: /home/me/file.png
Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.ExecuteAsync(ActionContext context, VirtualFileResult result)
我试过使用 System.IO.File.Exists
检查文件是否存在并在 Directory.GetFiles
中查找它,两者都说文件确实存在。我也试过将媒体类型更改为 image/png
,但这没有任何帮助。
为什么会出现此错误,我该如何解决?
这是我在一个应用程序中使用的,它完美地工作:
[HttpGet]
[Route("download")]
public async Task<iactionresult> Download([FromQuery] string file) {
var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
var filePath = Path.Combine(uploads, file);
if (!System.IO.File.Exists(filePath))
return NotFound();
var memory = new MemoryStream();
using (var stream = new FileStream(filePath, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
return File(memory, GetContentType(filePath), file);
}
此片段来自 here:我的代码略有不同。