我可以很容易地创建一个文本文件,但我想避免将文件保存在服务器上。
如何在内存中创建一个文本文件并通过 ajax 返回它,以便返回文件本身并且没有文件保留在服务器上?它不需要是 ajax,但我想尽可能避免回发。
我可以很容易地创建一个文本文件,但我想避免将文件保存在服务器上。
如何在内存中创建一个文本文件并通过 ajax 返回它,以便返回文件本身并且没有文件保留在服务器上?它不需要是 ajax,但我想尽可能避免回发。
您可以使用以下代码在网络表单中下载文本文件
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);
如果您使用 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
来处理下载链接。一个很好的教程可以在这里找到。