中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

.Net Core如何實現下載文件

發布時間:2020-10-23 17:18:45 來源:億速云 閱讀:1156 作者:小新 欄目:編程語言

這篇文章主要介紹.Net Core如何實現下載文件,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

  • 允許站點不識別content-type下載文件(即:不受mime類型限制下載)

  • 如何允許下載.nupkg和.apk后綴的文件

  • Razor模板的post下載文件例子

  • 半年來使用NetCore的一些感想和焦慮

允許站點不識別content-type下載文件(即:不受mime類型限制下載)

對于netcore的web項目而言,內置了一些content-type允許下載的文件類型;我們將通過一個普通的razorweb項目來看看直接通過連接下載excel例子;首先,在項目的wwwroot目錄創建一個bak文件夾,然后在該目錄下存放如下幾種文件:

.Net Core如何實現下載文件

通過測試這個時候只有excel.xls文件是能直接被下載的,其他的都是404:

.Net Core如何實現下載文件

要想.apk,.nupkg.cs等后綴的文件不被限制,我們可以通過 public static IApplicationBuilder UseStaticFiles(this IApplicationBuilder app, StaticFileOptions options); 擴展來設置,我們僅僅只需要修改為如下代碼:

            app.UseStaticFiles(new StaticFileOptions
            {                //設置不限制content-type
                ServeUnknownFileTypes = true 
            });

然后在重啟運行,這個時候我們再來訪問下載這幾個文件就沒問題了(注意這個時候下載任何后綴的文件都行),如下截圖:

.Net Core如何實現下載文件

至于cs后綴的文件在google瀏覽器中是直接顯示的內容,這里就不貼圖了,有興趣的可以試試;

如何允許下載.nupkg和.apk后綴的文件

通過上面例子我們能夠使用 ServeUnknownFileTypes = true; 直接設置無限制下載文件類型,這種通常不是太好或者說不允許,亦或者不常說的不安全吧;如果我們只需要增加.nupkg和.apk后綴的文件的下載,那么可以通過如下代碼來添加mime類型,如:

app.UseStaticFiles(new StaticFileOptions
            {                //ServeUnknownFileTypes = true 
                ContentTypeProvider = new FileExtensionContentTypeProvider(new Dictionary<string, string>
                {
                    { ".apk","application/vnd.android.package-archive"},
                    { ".nupkg","application/zip"}
                })
            });

同樣的也能對excel,apk,nupkg后綴的文件進行下載:

.Net Core如何實現下載文件

但是這個時候我們訪問 http://localhost:1120/bak/Startup.cs 就得不到下載的內容了:

.Net Core如何實現下載文件

因為我們沒有添加對.cs文件的擴展類型,故而系統直接給咋們返回404;這里我們通過FileExtensionContentTypeProvider對象的構造函數傳遞了一個mapping的dic類型來讓項目知道允許下載的content-type類型的文件;

Razor模板的post下載文件例子

老實說最近一端時間有空我就會研究下Razor模板,下面我們將通過她的post表單的方式來請求后端下載文件的方法;下面直接給出login.cshtml文件的代碼:

@page
@model LoginModel
@{}<form method="post">
    <button type="submit" asp-page-handler="down" class="btn">下載</button>
    <button type="submit" asp-page-handler="down01" class="btn">下載01</button>
    <button type="submit" asp-page-handler="down02" class="btn">下載02</button>
</form>

這里值得注意的是,razor通過asp-page-handler=來執行請求后端的方法,我們來看看最終她生成的html代碼后是什么樣子的:

.Net Core如何實現下載文件

能夠看出這里主要通過handler作為參數名稱來傳遞請求的后端方法,下面再來看看后端代碼這樣寫的(為了方便下載文件的路勁我以love.apk為例):

/// <summary>
        /// 虛擬文件地址輸出下載        
        /// </summary>
        /// <returns></returns>
        public IActionResult OnPostDown()
        {            
        var addrUrl = "/bak/love.apk";            
        return File(addrUrl, "application/vnd.android.package-archive", Path.GetFileName(addrUrl));
        }        
        /// <summary>
        /// 文件流的方式輸出        /// </summary>
        /// <returns></returns>
        public IActionResult OnPostDown01()
        {            
        var addrUrl = @"D:\F\學習\vs2017\netcore\Study.AspNetCore\WebApp02-1\wwwroot\bak\love.apk";            
        var stream = System.IO.File.OpenRead(addrUrl);            
        return File(stream, "application/vnd.android.package-archive", Path.GetFileName(addrUrl));
        }        
        /// <summary>
        /// 通過HttpClient獲取另外站點的文件流,再輸出        
        /// </summary>
        /// <returns></returns>
        public async Task<IActionResult> OnPostDown02()
        {            var path = "https://files.cnblogs.com/files/wangrudong003/%E7%89%B9%E4%BB%B701.gif";
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(path);            
            var stream = await client.GetStreamAsync(path);            
            return File(stream, "application/vnd.android.package-archive", Path.GetFileName(path));
        }

后端3個post接受方法都同樣使用了FileStreamResult來輸出下載文件,不同點在于文件來源不同;

對于簡單一些的站點來說,下載文件一般存在于站點目錄下,有點類似于我這里的wwwroot/bak目錄,因此能夠通過站點虛擬目錄下載,也就是咋們第一種的下載方式;

有一些站點為了文件安全性,一般會存在于web站點的相同服務器磁盤中,因此需要通過這里的第二種方式獲取文件流,再傳遞給File();

最后一種就是把自己其他站點或者別人站點上的文件轉一下,當做自己的文件來輸出,這種方式也就是咋們常說的盜鏈方式之一

對于razor的handler參數,這里需要注意的是她對應是咋們后端代碼OnGetxxx或者OnPostxxx方法中的xxx名稱,這是一種razor請求規范,必須要遵守哦。

以上是.Net Core如何實現下載文件的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

晴隆县| 宜宾县| 涡阳县| 宜州市| 于都县| 巴马| 陕西省| 天柱县| 随州市| 南安市| 固阳县| 桦南县| 南充市| 东乡县| 南木林县| 长海县| 渝北区| 大姚县| 含山县| 广州市| 区。| 德令哈市| 涿州市| 多伦县| 云霄县| 抚远县| 新巴尔虎右旗| 新巴尔虎左旗| 衡南县| 都江堰市| 富顺县| 葵青区| 施甸县| 横山县| 洛南县| 青田县| 金平| 岚皋县| 塔河县| 宝应县| 五峰|