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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Mvc 下载文件

發布時間:2025/7/14 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mvc 下载文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

你如何將文件傳送給用戶取決于你最開始如何存儲它,如果你將文件存入數據庫,你會用流的方式將文件返還給用戶,如果你將文件存在硬盤中,你只需要提供一個超鏈接即可,或者也可以以流的方式。每當你需要以流的方式將文件送到瀏覽器中,你都的使用到File()方法的重載(而不是使用我們先前一直使用的View()方法),對于File()方法有3類返回類型:FilePathResult,FileContentResult和FileStreamResult,第一種類型用于直接從磁盤返回文件;第二種類型用于將byte數組返回客戶端;而第三種方式將已經生成并打開的流對象的內容返回客戶端。


如果我們將上傳的文件存入了數據庫,并以byte數組的形式存入FileContent域內.而當需要提取時,它仍然會以一個byte數組進行提取,這意味著我們使用返回FileContentResult的File()重載,如果我們想讓提取的文件名更有意義,我們使用接受3個參數的重載,三個參數是:byte數組,MIME類型,文件名:

?Code

public FileContentResult GetFile(int id) {SqlDataReader rdr; byte[] fileContent = null; string mimeType = "";string fileName = "";const string connect = @"Server=.\SQLExpress;Database=FileTest;Trusted_Connection=True;";using (var conn = new SqlConnection(connect)){var qry = "SELECT FileContent, MimeType, FileName FROM FileStore WHERE ID = @ID";var cmd = new SqlCommand(qry, conn);cmd.Parameters.AddWithValue("@ID", id);conn.Open();rdr = cmd.ExecuteReader();if (rdr.HasRows){rdr.Read();fileContent = (byte[])rdr["FileContent"];mimeType = rdr["MimeType"].ToString();fileName = rdr["FileName"].ToString();}}return File(fileContent, mimeType, fileName); }

?

在View中最簡單的使用來使用這個Action只需提供一個超鏈接:

<a href="/GetFile/1">Click to get file</a>

?


如果在數據庫中存儲的圖片是圖片類型,和使用超鏈接不同的是,我們通過指向Controller action的一個帶有src屬性的<image>標簽來獲取:

<img src="/GetFile/1" alt="My Image" />

?

下面再讓我們來看看使用FilePathResult(用于從硬盤提取文件)是多簡單的事:

?Code

public FilePathResult GetFileFromDisk() {string path = AppDomain.CurrentDomain.BaseDirectory +"uploads/";string fileName = "test.txt";return File(path +fileName, "text/plain", "test.txt"); }

?


而這也可以用過超鏈接提取:

<a href="/GetFileFromDisk">Click to get file</a>

?


而最后一個選擇FileStreamResult也可以從磁盤中提取文件:

?Code

public FileStreamResult StreamFileFromDisk() {string path = AppDomain.CurrentDomain.BaseDirectory +"uploads/";string fileName = "test.txt";return File(new FileStream(path + fileName, FileMode.Open), "text/plain", fileName); }

?


FilePathResult和FileStreamResult的區別是什么?我們又該如何取舍呢?主要的區別是FilePathResult使用HttpResponse.TransmitFile來將文件寫入Http輸出流。這個方法并不會在服務器內存中進行緩沖,所以這對于發送大文件是一個不錯的選擇。他們的區別很像DataReader和DataSet的區別。于此同時, TransmitFile還有一個bug,這可能導致文件傳到客戶端一半就停了,甚至無法傳送。而FileStreamResult在這方面就很棒了。比如說:返回Asp.net Chart 控件在內存中生成的圖表圖片,而這并不需要將圖片存到磁盤中.

轉載于:https://www.cnblogs.com/kongfl888/p/3377437.html

總結

以上是生活随笔為你收集整理的Mvc 下载文件的全部內容,希望文章能夠幫你解決所遇到的問題。

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