物理文件提供程序返回404

时间:2018-04-03 08:20:17

标签: c# file asp.net-core asp.net-core-2.0

我尝试使用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错误?

1 个答案:

答案 0 :(得分:3)

IFileProvider.GetFileInfo()期望文件提供程序的根目录中的文件的子路径。根据{{​​3}}:

  

子路径 - 标识文件的相对路径。

在您的代码中,您传递lastSavedFilePath,其值为绝对路径 - @"C:\Users\MyUser\AppData\Local\Temp\MyPicture.png"

要解决此问题,您应该传递文件的相对路径,例如:

var fileInfo = provider.GetFileInfo("MyPicture.png");