如何解决如何从虚拟目录中获取文件并在Asp.net core视图中显示
过去我曾经从 wwwroot 文件夹中存储和获取我的文件并在视图中显示它们,但现在我想将我的所有文件放在不同的文件服务器位置,因为它的大小。下面是旧的实现。
public IActionResult Index ()
{
string[] filePaths = Directory.GetFiles(Path.Combine(this.Environment.WebrootPath,"Audio/"));
List<Fileviewmodel> files = new List<Fileviewmodel>();
foreach (string filePath in filePaths)
{
files.Add(new Fileviewmodel { FileName = Path.GetFileName(filePath) });
}
return View(files);
}
既然我想将所有文件从 wwwroot 移动到另一个网络位置,我需要创建一个虚拟目录并在目录中循环以获取我的文件,但我无法做到,我确实阅读了一些文章指出,在 Asp.net Core 中,我们需要在 startup.cs 中有以下代码才能从其他位置获取文件。
app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(@"\\xxx"),RequestPath = new PathString("/Audio"),EnableDirectorybrowsing = true
});
我在上面做了但不确定如何在我的控制器中使用它来执行我过去使用的相同操作并在视图索引中显示文件。任何帮助,将不胜感激。谢谢
解决方法
IWebHostEnvironment
(从 IHostingEnvironment
向后称为 asp.net core 2.2
)有 2 个方便的属性来保存根路径。 wwwroot
的一个可以通过 IWebHostEnvironment.WebRootPath
访问,另一个内容根目录(wwwroot
的父文件夹)可以通过 IWebHostEnvironment.ContentRootPath
访问。因此,当您使用另一个文件夹来保存您的文件时,它应该与 wwwroot
处于同一级别,并且当然是以 IWebHostEnvironment.ContentRootPath
为根的。
所以代码可以改成这样:
string[] filePaths = Directory.GetFiles(Path.Combine(this.Environment.ContentRootPath,"YourCustomRoot","Audio/"));
静态文件中间件仅用于自动服务静态文件请求。因此它在这里没有任何作用,因为您在服务中显式编写代码来访问文件。
,如果您想从网络共享中获取文件,那么请记住从您需要提供真实凭据的网络访问文件,最好的凭据将是 Web 应用程序的应用程序池标识,或者如果正在使用 Windows 身份验证,那么您可以使用请求的身份。
访问文件后,您可以使用 FileResult 或 FileStreamResult 或 PhysicalFileResult 渲染文件
,谢谢大家的回复,我想把我的文件放在 wwwroot 中,然后放在网络服务器本地的某个地方的原因是因为音频文件和浏览器只能播放来自网络服务器的音频文件不是本地或网络存储。
起初我在html中尝试了如下音频标签,然后chrome阻止了它,
所以我一直在寻找网络服务器可以为我的音频文件提供服务的东西,chrome 不会阻止它,解决方案是虚拟目录。
最后,我通过将下面的内容添加到我的启动并将我的音频标签指向它来做到这两点
启动
app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(@"\\xxx"),RequestPath = new PathString("/Audio"),EnableDirectoryBrowsing = true
});
控制器
string[] filePaths = Directory.GetFiles(Path.Combine(@"\\xxx));
查看
<audio controls src="https://mywebserver/Audio/name.wav" type="audio/wav"> </audio>
我不确定我是否做得对,但到目前为止工作正常。如果您有任何建议,那就太好了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。