我可以轻松地创建文本文件,但我想避免将文件保留在服务器上。
如何在内存中创建文本文件并通过ajax返回,以便返回文件本身并且服务器上没有文件?它不需要是ajax但我想尽可能避免回发。
答案 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。