簡體   English   中英

如何在瀏覽器中打開MemoryStream文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM