日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp绑定gridview属性_如何在ASP.NET Core中自定义Azure Storage File Provider

發布時間:2025/3/8 asp.net 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp绑定gridview属性_如何在ASP.NET Core中自定义Azure Storage File Provider 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主題:如何在ASP.NET Core中自定義Azure Storage File Provider

作者: Lamond Lu

地址: ?https://www.cnblogs.com/lwqlun/p/10406566.html

項目源代碼: https://github.com/lamondlu/AzureFileProvider

背景

ASP.NET Core是一個擴展性非常高的框架,開發人員可以根據自己的需求擴展出想要的功能。File Provider是ASP.NET Core中的一個重要組件,通過這個組件,開發人員可以暴露一組文件,并允許應用程序像訪問靜態文件一樣訪問暴露的文件。

ASP.NET Core中內置了3種File Provider

  • PhysicalFileProvider - 用來訪問和應用程序部署在一起的靜態文件

  • ManifestEmbeddedFileProvider - 用來訪問程序集中的內嵌文件

  • CompositeFileProvider - 將多個File Provider合并使用

那么如何自定義一個File Provider呢?比如如何將Azure Files Storage中的文件暴露給ASP.NET Core應用程序。今天我們來演示一下,如果通過實現IFileProvider 接口來實現一個Azure Files Storage Provider。

本文中只針對Azure Files Storage, Azure Blob Storage的實現可以參見Filip w的博文

創建.NET Core Library項目

首先我們使用Visual Studio 2017,創建一個Class Library項目, 命名為AzureFileProvider

為了使用IFileProvider接口和Azure Storage服務,這里我們需要使用Nuget引入2個庫

  • Microsoft.AspNetCore.App

  • WindowsAzure.Storage

創建AzureFileProvider

為了創建一個ASP.NET Core支持的File Provider, 我們就需要自己創建一個類,并讓它實現IFileProvider接口。

這里首先我們創建一個類AzureFileProvider, 它實現了IFileProvider接口

從以上代碼中,我們可以了解到,IFileProvider接口定義了3個需要實現方法

  • GetDirectoryContents - 這個方法是用來獲取指定目錄下的內容的

  • GetFileInfo - 這個方法使用來獲取指定文件內容的

  • Watch - 這個方法是用來監聽文件變更的,這個暫時不需要實現它

實現GetDirectoryContents方法

為了實現GetDirectoryContents方法,我們需要首先創建一個IDirectoryContents接口的實現類, 因為它是這個方法的返回類型。

我們創建一個類AzureStorageDirectoryContents, 它實現了IDirectoryContents接口。

代碼解釋:

  • 這里IDirectoryContents其實就是為了顯示指定目錄中的文件結構

  • IFileInfo接口對象既可以表示文件也可以表示子目錄,這個接口的2個實現我會在后面說明

  • 這里我們通過構造函數,將指定文件夾內的文件結構注入到了AzureStorageDirectoryContents雷中。

下面我們就可以來添加GetDirectoryContents方法的實現了。

代碼解釋:

  • 這里我們通過構造函數為AzureFileProvider類注入了一個Azure Files Storage強類型配置類AzureStorageSetting, 它的數據源是appSettings.json, 后續我們會通過強類型配置將其注入

  • GetRootDirectory方法是通過Azure Files Storage配置,獲得Azure Files Storage中文件集合的根目錄

  • GetDirectoryContents中subpath.Substring(1)代碼的作用是去除subpath帶的第一個“/”。如果不去除,會讀取不到文件

  • 這里我們使用了ListFilesAndDirectoriesSegmentedAsync方法獲取了指定目錄中所有的文件和目錄

  • 如果是文件,我們會實例化一個AzureFileInfo對象,如果是一個目錄,我們會實例化一個AzureDirectoryInfo對象

  • 最終我們將讀取到的所有文件和目錄信息通過AzureStorageDirectoryContents類的構造函數注入。

創建AzureFileInfoAzureDirectoryInfo

為了區分文件和目錄,我們創建2個新類AzureFileInfo和AzureDirectoryInfo。 他們都實現了IFileInfo接口。

AzureFileInfo

代碼解釋

  • 這里我們通過AzureFileInfo的構造函數傳入了一個CloudFile對象, 這個對象將作為Name, PhysicalPath, LastModified等屬性的數據源。

  • 我們使用CloudFile對象DownloadRangeToStreamAsync, 將其對應的文件流下載。注意這里加載文件流之后,需要將文件流的Position置0(即流的頭部)

  • 文件的長度即文件流的長度

  • 強制設置IsDirectory屬性為false, 因為當前處理的是文件

AzureDirectoryInfo

代碼解釋

  • 這里我們通過AzureDirectoryInfo的構造函數傳入了一個CloudFileDirectory對象, 這個對象將作為Name, PhysicalPath, LastModified等屬性的數據源。

  • 強制設置IsDirectory屬性為true, 因為當前處理的是目錄

  • 這里我們沒有實現Length屬性和CreateReadStream, 因為我們處理的是目錄, 這2個屬性沒有必要實現。

實現GetFileInfo方法

相對于GetDirectoryContents方法的實現,GetFileInfo方法就簡單多了,我們只需要根據當前指定的subpath, 將文件信息返回即可。

如何啟用AzureFileProvider

下面我們來試驗一下我們編寫的AzureFileProvider是否能運行成功。

首先我們創建一個默認ASP.NET Core Api項目,并引用上一步中編譯好的程序集AzureFileProvider.dll。

appSettings.json中, 我們需要定義Azure Files Storage的配置

例:

第二步,我們需要修改Startup.cs文件的Configure方法。

代碼解釋

  • 這里我們使用強類型配置綁定,獲取了appSettings.json中的Azure Files Storage的配置

  • 在配置靜態文件中間件部分,我們通過StaticFileOptions配置對象,指定了當前應用使用AzureFileProvider。

  • 為了演示效果,我這里也啟用了DirectoryBrowser中間件,即可以使用網頁查看目錄結構。這個功能比較危險,在正式項目很少使用。所以正式使用時,最好將這段代碼刪掉。

最終效果

現在我們啟動當前項目, 訪問"/files", 即可查看到當前指定Azure Files Storage中的所有文件和目錄

項目源代碼

https://github.com/lamondlu/AzureFileProvider

Nuget程序集

以上類庫,我已經發布到了Nuget上, 如果你不想每次都把前面的代碼寫一遍,可以直接安裝這個程序集來使用。

Install-Package LamondLu.AzureFileProvider

總結

以上是生活随笔為你收集整理的asp绑定gridview属性_如何在ASP.NET Core中自定义Azure Storage File Provider的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。