繁体   English   中英

如何从虚拟目录中获取文件并在视图中显示 Asp.net 内核

[英]How to get files from virtual directory and display in view 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
        });

我在上面做了,但不确定如何在我的 controller 中使用它来执行我过去使用的相同操作并在视图索引中显示文件。 任何帮助,将不胜感激。 谢谢

IWebHostEnvironment (从asp.net core 2.2向后称为IHostingEnvironment )有 2 个方便的属性来保存根路径。 一个用于wwwroot可以通过IWebHostEnvironment.WebRootPath访问,另一个用于内容根( wwwroot的父文件夹)可以通过IWebHostEnvironment.ContentRootPath访问。 因此,当您使用另一个文件夹来保存文件时,它应该与wwwroot处于同一级别,当然也应该以IWebHostEnvironment.ContentRootPath为根。

所以代码可以改成这样:

 string[] filePaths = Directory.GetFiles(Path.Combine(this.Environment.ContentRootPath, 
                                                      "YourCustomRoot", "Audio/"));

static 文件中间件仅用于自动处理对 static 文件的请求。 所以它在这里不扮演任何角色,因为您在服务中明确编写代码来访问文件。

如果您要从网络共享中获取文件,请记住从需要提供真实凭据的网络访问文件,最好的凭据将是 web 应用程序的应用程序池标识,或者如果正在使用 windows 身份验证,那么您可以使用要求。

访问网络驱动器

访问文件后,您可以使用 FileResult 或 FileStreamResult 或 PhysicalFileResult 呈现文件

在 asp.net 内核中渲染文件

谢谢大家的回复,我想把我的文件放在 wwwroot 的原因,然后放在网络服务器本地的某个地方是因为那些音频文件和浏览器只能播放来自 web 服务器的音频文件不是本地的或网络存储。

起初我在 html 中尝试了如下音频标签,然后 chrome 阻止了它,

所以我一直在寻找网络服务器可以提供我的音频文件的东西,chrome 不会阻止它,解决方案是虚拟目录。

最后我通过在下面添加到我的启动并将我的音频标签指向它来做到了

启动

app.UseFileServer(new FileServerOptions
        {
            FileProvider = new PhysicalFileProvider(@"\\xxx"),
            RequestPath = new PathString("/Audio"),
            EnableDirectoryBrowsing = true
        });

Controller

string[] filePaths = Directory.GetFiles(Path.Combine(@"\\xxx));

看法

<audio controls src="https://mywebserver/Audio/name.wav" type="audio/wav"> </audio>

我不确定我是否做得对,但到目前为止工作正常。 如果你有任何建议会很棒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM