在内存中创建文本文件并通过ajax返回,可能吗?

时间:2013-05-10 12:43:06

标签: asp.net

我可以轻松地创建文本文件,但我想避免将文件保留在服务器上。

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

2 个答案:

答案 0 :(得分:1)

您可以使用以下代码在webforms中下载文本文件

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);

答案 1 :(得分: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');  

如果您使用的是webforms,我认为最好的方法是创建一个HttpHandler来处理下载链接。可以找到一个很好的教程here