gpt4 book ai didi

c# - 如何在浏览器中打开 MemoryStream 文件?

转载 作者:太空狗 更新时间:2023-10-30 00:16:25 25 4
gpt4 key购买 nike

我想在我的网络应用程序的代码隐藏文件中创建一个文本文件。但是,我不允许将此文件保存到服务器。所以我尝试使用 MemoryStream 类将我的文件保存到内存中。到目前为止,我有,

MemoryStream memoryStream = new MemoryStream();
TextWriter textWriter = new StreamWriter(memoryStream);
textWriter.WriteLine("Something");
memoryStream.Close();

它看起来像工作但我的要求是当他/她点击按钮时在客户端浏览器上打开这个文件。由于此文件没有类似..../text.txt 的物理路径。我不知道如何在浏览器上打开它。

如何使用 C# 在 ASP.Net 中执行此操作。我进行了很多搜索,但找不到适合我的解决方案。

提前致谢。

最佳答案

这比您想象的要容易得多。请记住,HTTP 协议(protocol)实际上并不传输最严格意义上的"file"。它传输请求和响应,每个请求和响应都包含标题和内容。在本例中,您关心的是响应的 header 和内容。

在 WebForms 应用程序中执行此操作的最简单方法是使用 generic handler .具体来说,查看该链接中处理程序响应的实现:

context.Response.ContentType = "image/png";
context.Response.WriteFile("~/Flower1.png");

这是在适当设置响应的 header 后将图像文件的内容写入响应。你想要的更接近于实现中注释掉的内容:

context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");

这将向浏览器发送纯文本,仅此而已。浏览器不会认为它是网页或类似的东西,不会对其应用任何样式等。就网络浏览器而言,它只是下载一个包含“Hello World”字样的文本文件.您可以Response.Write() 构建该文件的所有文本。

您可以进一步自定义您的 response headers为浏览器提供更多信息。例如,如果您将以下 header 添加到您的 HttpResponse :

Content-Disposition: attachment; filename=myfile.txt

然后浏览器会将其翻译为应该下载并保存此"file",而不仅仅是显示。 (当然,用户的浏览器设置可能会告诉它无论如何都要显示它,但这是服务器向浏览器“建议”它应该保存文件的正确方式。)

从浏览器的角度来看,"file"来自哪里并不重要。无论它是来自服务器的文件系统还是动态生成或神奇地召唤出来的,都没有区别。浏览器只关心响应头和内容。如果标题说它是文本,而他们说它是文件,那么内容将被视为文本文件。

关于c# - 如何在浏览器中打开 MemoryStream 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7173898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com