[C#]將檔案回傳給client

目的 將欲產生的檔案輸出成資料流 直貼回傳給User

 

有時候R 要產生檔案給User 都會先把檔案做好放在伺服器上 再去讀取他成為資料流 在噴回去給User

這邊想要解決將檔案放在伺服器上的問題  程式產生好檔案後直接噴回去給User  稍微紀錄一下作法

 MemoryStream ms = new MemoryStream();
 StreamWriter sw = new StreamWriter(ms);
 sw.Write("test");
 sw.Flush();
 sw.Close();
 return ms;

這邊得作法是利用StreamWrite來幫忙將資料寫入到MemoryStream裡面,MemoryStream的內建寫入方法太囉唆,所以請StreamWrite幫忙

主要是處理將文字檔案輸出給User

仔細想想上面那樣子好像有點麻煩

Encoding.Default.GetBytes("test")

後來這樣做

反正最後也只是要byte[]

MemoryStream ms = abc.GetMS()
Response.Clear();
string filename = "test.txt";
Response.AddHeader("Content-Disposition", "attachment;filename=" + filename);
Response.BinaryWrite(ms.ToArray());
Response.End();  

前端就大概這樣輸出 這邊是一般的webFrom網頁的寫法

MVC的Controller我是這樣寫

string filename = HttpUtility.UrlEncode("中文檔名讚讚讚", Encoding.UTF8);
byte[] file= ms.toArray();
Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename);
return File(file, "application/txt");

標頭要比較注意而已 attachment代表附件 inline代表內嵌檔案

Reference

https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Headers/Content-Disposition