0

我可以很容易地创建一个文本文件,但我想避免将文件保存在服务器上。

如何在内存中创建一个文本文件并通过 ajax 返回它,以便返回文件本身并且没有文件保留在服务器上?它不需要是 ajax,但我想尽可能避免回发。

4

2 回答 2

1

您可以使用以下代码在网络表单中下载文本文件

MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
tw.WriteLine("HELLO WORLD!");
tw.WriteLine("I WANT TO SAVE THIS FILE AS A .TXT FILE!");
tw.Flush();
var bytes = ms.GetBuffer();
Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename=test.txt");
Response.AddHeader("Content-Length", bytes.Length.ToString());
Response.ContentType = "text/plain";
Response.BinaryWrite(bytes);
于 2013-05-10T12:57:21.117 回答
0

如果您使用 MVC 或 WebForms,Vijay 的回答是正确的。

关于防止回发,您不必使用ajax来防止回发。

如果您使用的是 MVC,您只需window.location在 js 中使用并将其指向您的操作方法。就像是:

// In your controller:
public class HomeController : Controller
{
    public FileResult GetFile2(int id)
    {
        if (SomeCondition)
        {
           return null;
        }
        var fileName = "MyResult.txt";
        var content = "Here's the result";
        var contentType = "text/plain";
        return File(Encoding.ASCII.GetBytes(content), contentType, fileName);
   }

// And in your view/js file:
window.location.href = ('/Home/GetFile?id=1');  

如果您使用的是网络表单,我认为最好的方法是创建一个HttpHandler来处理下载链接。一个很好的教程可以在这里找到。

于 2013-05-10T13:03:21.167 回答