IFileProvider 为 Physical Provider 中所有文件的最后修改日期返回 01/01/0001
IFileProvider returning 01/01/0001 for last modified date of all files in Physical Provider
在启动时,我在配置服务中设置了我的 IFileProvider,如下所示:
IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetParent(env.ContentRootPath).ToString());
services.AddSingleton<IFileProvider>(physicalProvider);
现在,当我去使用在我的控制器中查找文件的最后修改日期时,我得到所有文件的日期 01/01/0001。我的代码如下:
private readonly IWebHostEnvironment env;
private IFileProvider _fileProvider;
public IConfiguration Configuration { get; }
public MainReviewController(LoginDBContext context, IConfiguration configuration, IWebHostEnvironment env, IFileProvider fileProvider)
{
_context = context;
connectionString = configuration["ConnectionStrings:DBContext"];
this.env = env;
_fileProvider = fileProvider;
}
在我使用依赖注入来使用文件提供程序后,我在 post 请求中使用了以下代码
var rootPath = Path.Combine(Directory.GetParent(env.ContentRootPath).ToString(), "ARMSFiles");
foreach (var file in mainreviewdocuments)
{
var filePath = Path.Combine(rootPath, file.DOCUMENT_FULL_PATH);
System.Diagnostics.Debug.WriteLine(filePath);
System.Diagnostics.Debug.WriteLine(_fileProvider.GetFileInfo(filePath).LastModified);
}
对此有什么想法吗?在我的启动中,我也使用依赖注入来确保我使用与我的控制器相同的环境变量,因此目录应该对齐。它基本上是我的根文件夹之外的一个文件夹,因为它更安全一些,我在实际部署它时将它用于 webdav。
我使用下面的代码,得到 LastModified
;
的值
IDirectoryContents dirContents = _fileProvider.GetDirectoryContents("ARMSFiles");
IFileInfo fileInfo = _fileProvider.GetFileInfo("ARMSFiles/TextFile.txt");
测试结果
测试代码:
提示:以下代码仅供测试,请不要直接在生产环境中使用。
1。测试方法
public IActionResult TestFileProvider()
{
// the static root path, just for test
string filePath = @"D:\M***e\F***e\TestCookie\ARMSFiles\TextFile.txt";
IDirectoryContents dirContents = _fileProvider.GetDirectoryContents("ARMSFiles");
IFileInfo fileInfo = _fileProvider.GetFileInfo("ARMSFiles/TextFile.txt");
System.Diagnostics.Debug.WriteLine(filePath);
System.Diagnostics.Debug.WriteLine(fileInfo.LastModified);
return Ok(fileInfo.LastModified);
}
2。配置服务方法
public void ConfigureServices(IServiceCollection services)
{
//IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetParent(env.ContentRootPath).ToString());
var physicalProvider = _env.ContentRootFileProvider;
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);
services.AddSingleton<IFileProvider>(compositeProvider);
...
services.AddControllersWithViews();
}
3。配置方法
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "ARMSFiles")),
RequestPath = "/ARMSFiles"
});
在启动时,我在配置服务中设置了我的 IFileProvider,如下所示:
IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetParent(env.ContentRootPath).ToString());
services.AddSingleton<IFileProvider>(physicalProvider);
现在,当我去使用在我的控制器中查找文件的最后修改日期时,我得到所有文件的日期 01/01/0001。我的代码如下:
private readonly IWebHostEnvironment env;
private IFileProvider _fileProvider;
public IConfiguration Configuration { get; }
public MainReviewController(LoginDBContext context, IConfiguration configuration, IWebHostEnvironment env, IFileProvider fileProvider)
{
_context = context;
connectionString = configuration["ConnectionStrings:DBContext"];
this.env = env;
_fileProvider = fileProvider;
}
在我使用依赖注入来使用文件提供程序后,我在 post 请求中使用了以下代码
var rootPath = Path.Combine(Directory.GetParent(env.ContentRootPath).ToString(), "ARMSFiles");
foreach (var file in mainreviewdocuments)
{
var filePath = Path.Combine(rootPath, file.DOCUMENT_FULL_PATH);
System.Diagnostics.Debug.WriteLine(filePath);
System.Diagnostics.Debug.WriteLine(_fileProvider.GetFileInfo(filePath).LastModified);
}
对此有什么想法吗?在我的启动中,我也使用依赖注入来确保我使用与我的控制器相同的环境变量,因此目录应该对齐。它基本上是我的根文件夹之外的一个文件夹,因为它更安全一些,我在实际部署它时将它用于 webdav。
我使用下面的代码,得到 LastModified
;
IDirectoryContents dirContents = _fileProvider.GetDirectoryContents("ARMSFiles");
IFileInfo fileInfo = _fileProvider.GetFileInfo("ARMSFiles/TextFile.txt");
测试结果
测试代码:
提示:以下代码仅供测试,请不要直接在生产环境中使用。
1。测试方法
public IActionResult TestFileProvider()
{
// the static root path, just for test
string filePath = @"D:\M***e\F***e\TestCookie\ARMSFiles\TextFile.txt";
IDirectoryContents dirContents = _fileProvider.GetDirectoryContents("ARMSFiles");
IFileInfo fileInfo = _fileProvider.GetFileInfo("ARMSFiles/TextFile.txt");
System.Diagnostics.Debug.WriteLine(filePath);
System.Diagnostics.Debug.WriteLine(fileInfo.LastModified);
return Ok(fileInfo.LastModified);
}
2。配置服务方法
public void ConfigureServices(IServiceCollection services)
{
//IFileProvider physicalProvider = new PhysicalFileProvider(Directory.GetParent(env.ContentRootPath).ToString());
var physicalProvider = _env.ContentRootFileProvider;
var embeddedProvider = new EmbeddedFileProvider(Assembly.GetEntryAssembly());
var compositeProvider = new CompositeFileProvider(physicalProvider, embeddedProvider);
services.AddSingleton<IFileProvider>(compositeProvider);
...
services.AddControllersWithViews();
}
3。配置方法
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "ARMSFiles")),
RequestPath = "/ARMSFiles"
});