簡體   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