前言
隨著Asp .Net Core的升級迭代,很多開發者都逐漸傾向于.net core開發,
.net core是一個跨平臺的應用程式,可以在windows、Linux、macOS系統上進行開發和部署,是一個體系結構更精簡模塊化框架,
- 生成WebUi和WebApi的統一使用場景;
- 集成新的客戶端框架和開發作業流;
- 前后端分離為兩個dll(view.dll,web.dll),更容易迭代,可以使用應用版本控制;
- 內置依賴注入,更高效安全;
- 高性能模塊化的HTTP請求管道;
- 能夠在iis,nginx,apache,docker上進行托管;
- web開發方式更簡化;
釋語
ASP.Net Core接收并處理的大部分是針對靜態檔案的請求,最常見的是JavaScript、CSS樣式和圖片,
比較有意思的是,他提供了中間件來處理針對于靜態檔案的請求,這種請求可以通過http請求的方式獲取指定的物理檔案,并且將其所在的物理目錄結構展示出來,
通過http請求獲取的web資源大部分來源于存盤在服務器磁盤上的靜態檔案,
為什么使用靜態檔案服務器?因為這樣不需要安裝web服務器,打開程式即可使用,方便快捷,
詳解
說了這么多,我們來實際操作一下:
使用的是 StaticFiles 中間件,
我們先創建一個Asp .Net Core Web應用程式,操作方式如下:
1、創建一個名為NetCoreFileServer的專案,選擇web參考程式,相應的中間件會自動加載進來
選擇Web參考程式

發布物理檔案
創建專案后,在wwwroot 檔案夾下創建一個圖片檔案夾,添加一行圖片,然后將程式運行起來,
網址直接導航到圖片:http://localhost:10610/img/Lighthouse.jpg


默認的話只能訪問wwwroot檔案夾下面的檔案,如果需要訪問非wwwroot檔案下的檔案,就需要在中間件中擴展一下;
打開Startup.cs,找到 Configure 方法,在app.UseStaticFiles();后面添加一個擴展方法,如下標紅部分:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseCookiePolicy(); //這是添加的擴張方法 //設定訪問檔案 app.UseStaticFiles(new StaticFileOptions { //配置除了默認的wwwroot檔案中的靜態檔案以外的檔案夾提供 Web 根目錄外的檔案 , //經過此配置以后,就可以訪問非wwwroot檔案下的檔案 FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), "Image")), RequestPath = "/Image", }); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
然后訪問一下非wwwroot檔案夾下的檔案,http://localhost:10610/Image/Hydrangeas.jpg
這樣就能正常訪問檔案了,其html檔案等訪問方式一樣的操作,

靜態檔案服務器
按照類似的方式,我們來做一下靜態檔案的訪問;
同理,我們需要在Startup.cs中找到 Configure 方法,在app.UseStaticFiles();后面添加一個擴展方法,如下標紅部分:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseCookiePolicy(); //這是添加的擴張方法 //設定訪問檔案 app.UseStaticFiles(new StaticFileOptions { //配置除了默認的wwwroot檔案中的靜態檔案以外的檔案夾提供 Web 根目錄外的檔案 , //經過此配置以后,就可以訪問非wwwroot檔案下的檔案 FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), "Image")), RequestPath = "/Image", }); //配置訪問指定檔案磁盤 var dir = new DirectoryBrowserOptions(); dir.FileProvider = new PhysicalFileProvider(@"E:\"); app.UseDirectoryBrowser(dir); var staticfile = new StaticFileOptions(); staticfile.FileProvider = new PhysicalFileProvider(@"E:\");//指定目錄 這里指定E盤,也可以是其它目錄 app.UseStaticFiles(staticfile); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
配置好后啟動程式進行訪問得到目錄,點擊指定檔案即可訪問

這樣我們就能瀏覽指定磁盤的檔案了,
你會發現有些檔案打開會404,有些又可以打開,那是因為MIME 沒有識別出來,
我們可以手動設定這些 MIME ,也可以給這些未識別的設定一個默認值,如下標紅部分,
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseCookiePolicy(); //這是添加的擴張方法 //設定訪問檔案 app.UseStaticFiles(new StaticFileOptions { //配置除了默認的wwwroot檔案中的靜態檔案以外的檔案夾提供 Web 根目錄外的檔案 , //經過此配置以后,就可以訪問非wwwroot檔案下的檔案 FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), "Image")), RequestPath = "/Image", }); //配置訪問指定檔案磁盤 var dir = new DirectoryBrowserOptions(); dir.FileProvider = new PhysicalFileProvider(@"E:\"); app.UseDirectoryBrowser(dir); var staticfile = new StaticFileOptions(); staticfile.FileProvider = new PhysicalFileProvider(@"E:\");//指定目錄 這里指定E盤,也可以是其它目錄 staticfile.ServeUnknownFileTypes = true; staticfile.DefaultContentType = "application/x-msdownload"; //設定默認 MIME var provider = new FileExtensionContentTypeProvider(); provider.Mappings.Add(".log", "text/plain");//手動設定對應MIME staticfile.ContentTypeProvider = provider; app.UseStaticFiles(staticfile); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }
設定好以后,對于未識別的,默認為下載, .log 就被我手動設定成文本方式,
對于前面的這么多設定,StaticFiles 提供了一種簡便的寫法,UseFileServer
app.UseFileServer(new FileServerOptions() { FileProvider = new PhysicalFileProvider(@"C:\"), EnableDirectoryBrowsing = true });
如果需要加上MIME,StaticFileOptions 需要系結上,
這樣就弄好一個靜態檔案服務器了,同一個局域網內傳輸檔案就可以直接飛速下載,
參考檔案1:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-2.1&tabs=aspnetcore2x#serve-static-files
參考檔案2:https://www.cnblogs.com/linezero/p/5541326.html
歡迎關注訂閱我的微信公眾平臺【熊澤有話說】,更多好玩易學知識等你來取作者:熊澤-學習中的苦與樂 公眾號:熊澤有話說 出處: https://www.cnblogs.com/xiongze520/p/14143581.html 創作不易,著作權歸作者和博客園共有,轉載或者部分轉載、摘錄,請在文章明顯位置注明作者和原文鏈接,
|
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/235844.html
標籤:.NET技术

