[英]How to Open MemoryStream File In Browser?
我想在我的Web應用程序中的代碼隱藏文件中創建一個Text文件。 但是,我不允許將此文件保存到服務器。 所以我嘗試使用MemoryStream類將我的文件保存到內存中。 到目前為止,我有,
MemoryStream memoryStream = new MemoryStream();
TextWriter textWriter = new StreamWriter(memoryStream);
textWriter.WriteLine("Something");
memoryStream.Close();
它似乎工作但我的要求是當他/她點擊按鈕時在客戶端瀏覽器上打開此文件。 由於此文件沒有像.... / text.txt這樣的物理路徑。 我不知道如何在瀏覽器上打開它。
如何使用C#在ASP.Net中執行此操作。 我搜索了很多,但找不到適合我的解決方案。
提前致謝。
這比你想象的容易得多。 請記住,HTTP協議實際上並不是在嚴格意義上傳輸“文件”。 它傳輸請求和響應,每個請求和響應包含標頭和內容。 在這種情況下,您關注響應的標頭和內容。
在WebForms應用程序中執行此操作的最簡單方法是使用通用處理程序 。 具體來說,看一下該鏈接中處理程序響應的實現:
context.Response.ContentType = "image/png";
context.Response.WriteFile("~/Flower1.png");
這是在適當地設置響應頭之后將圖像文件的內容寫入響應。 你想要的更接近實施中注釋的內容:
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
這將發送到瀏覽器純文本,僅此而已。 瀏覽器不會認為它是一個網頁或類似的東西,不會對它應用任何樣式等。就Web瀏覽器而言,它只是下載了一個文本文件,其中包含“Hello World”字樣。 您可以Response.Write()
您要構建該文件的所有文本。
您可以進一步自定義響應標頭 ,以便為瀏覽器提供更多信息。 例如,如果您將以下標頭添加到HttpResponse :
Content-Disposition: attachment; filename=myfile.txt
然后瀏覽器會將其翻譯為意味着應該下載並保存此“文件”,而不僅僅是顯示。 (當然,用戶的瀏覽器設置可能會告訴它顯示它,但這是服務器向瀏覽器“建議”應該保存文件的正確方法。)
從瀏覽器的角度來看,“文件”的來源並不重要。 無論是來自服務器的文件系統還是動態生成或神奇地變形,它都沒有區別。 瀏覽器僅關注響應標頭和內容。 如果標題說它是文本,並且他們說它是文件,那么內容將被視為文本文件。
為什么需要編寫MemoryStream? 如果要將其發送到瀏覽器,只需將其寫入HTTP響應即可。
Response.WriteLine("Something");
如果您想讓瀏覽器將此響應下載為文件, 請參閱此處 。
老實說,我認為這不是Web開發的好模式。
它只是讀取您的文件並將其數據作為文本發送到客戶端(Web瀏覽器),在文本框中編輯,發回修改后的文本並將其作為文件保存在您選擇的路徑或存儲中。
HTTP是一種無狀態協議,因此您不會在服務器端打開文件,而在客戶端編輯其內容,因為在服務器響應結束后,這兩個層都是絕對斷開的。
好吧,我想我想出了你想要的東西。 你說你有一個按鈕,你想要轉到文本文件的內容,想要在內存中創建,但你不知道當用戶點擊按鈕時發送瀏覽器的URL是什么?
如果是這種情況,你可以做的是:
1) On the page that has the button, set the href (or link-location or whatever) of the button to be a new asp.net page (jet to be created). Something like "textfile.aspx" or whatever. Also, remove all the code regarding the memory-stream.
2) Create the new asp.net file (textfile.aspx, or whatever you decided to call it). The content of that file should be like this:
Response.WriteLine("Something"); // Or whatever you previously wrote to the MemoryStream
關鍵是,您應該分成兩個不同的文件(或基於查詢字符串的單獨操作)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.