emr*_*azi 4 c# asp.net memorystream
我想在我的Web应用程序中的代码隐藏文件中创建一个Text文件.但是,我不允许将此文件保存到服务器.所以我尝试使用MemoryStream类将我的文件保存到内存中.到目前为止,我有,
MemoryStream memoryStream = new MemoryStream();
TextWriter textWriter = new StreamWriter(memoryStream);
textWriter.WriteLine("Something");
memoryStream.Close();
Run Code Online (Sandbox Code Playgroud)
它似乎工作但我的要求是当他/她点击按钮时在客户端浏览器上打开此文件.由于此文件没有像..../text.txt这样的物理路径.我不知道如何在浏览器上打开它.
如何使用C#在ASP.Net中执行此操作.我搜索了很多,但找不到适合我的解决方案.
提前致谢.
这比你想象的容易得多.请记住,HTTP协议实际上并不是在严格意义上传输"文件".它传输请求和响应,每个请求和响应包含标头和内容.在这种情况下,您关注响应的标头和内容.
在WebForms应用程序中执行此操作的最简单方法是使用通用处理程序.具体来说,看一下该链接中处理程序响应的实现:
context.Response.ContentType = "image/png";
context.Response.WriteFile("~/Flower1.png");
Run Code Online (Sandbox Code Playgroud)
这是在适当地设置响应头之后将图像文件的内容写入响应.你想要的更接近实施中注释的内容:
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
Run Code Online (Sandbox Code Playgroud)
这将发送到浏览器纯文本,仅此而已.浏览器不会认为它是一个网页或类似的东西,不会对它应用任何样式等.就Web浏览器而言,它只是下载了一个文本文件,其中包含"Hello World"字样.您可以Response.Write()创建该文件的所有文本.
您可以进一步自定义响应标头,以便为浏览器提供更多信息.例如,如果您将以下标头添加到HttpResponse:
Content-Disposition: attachment; filename=myfile.txt
Run Code Online (Sandbox Code Playgroud)
然后浏览器会将其翻译为意味着应该下载并保存此"文件",而不仅仅是显示.(当然,用户的浏览器设置可能会告诉它显示它,但这是服务器向浏览器"建议"应该保存文件的正确方法.)
从浏览器的角度来看,"文件"的来源并不重要.无论是来自服务器的文件系统还是动态生成或神奇地变形,它都没有区别.浏览器仅关注响应标头和内容.如果标题说它是文本,并且他们说它是文件,那么内容将被视为文本文件.
| 归档时间: |
|
| 查看次数: |
9488 次 |
| 最近记录: |