我尝试使用PhysicalFileProvider
安全地访问文件我提供了根路径作为本地临时文件的路径。
public static string BASE_PATH = Path.GetTempPath();
public static string lastSavedFilePath = @"C:\Users\MyUser\AppData\Local\Temp\MyPicture.png"
[HttpGet("{id}")]
public async Task<FileResult> GetFileById(int id)
{
//provides access to the physical file system, scoping all paths to a directory and its children
IFileProvider provider = new PhysicalFileProvider(BASE_PATH);
var fileInfo = provider.GetFileInfo(lastSavedFilePath);
var fileStream = fileInfo.CreateReadStream();
this._contentTypeProvider.TryGetContentType(lastSavedFilePath, out var mimeType);
return File(fileStream, mimeType, "ProfilePicture.png");
}
我正在测试我的本地路径中确实存在的文件,但我似乎仍然遇到FileNotFound
错误?为什么我为BaseDirectory的直接子文件获取FileNotFound错误?
答案 0 :(得分:3)
IFileProvider.GetFileInfo()
期望文件提供程序的根目录中的文件的子路径。根据{{3}}:
子路径 - 标识文件的相对路径。
在您的代码中,您传递lastSavedFilePath
,其值为绝对路径 - @"C:\Users\MyUser\AppData\Local\Temp\MyPicture.png"
。
要解决此问题,您应该传递文件的相对路径,例如:
var fileInfo = provider.GetFileInfo("MyPicture.png");