目的 將欲產生的檔案輸出成資料流 直貼回傳給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