2013-05-10 32 views
0

我可以很容易地創建一個文本文件,但我想避免必須將文件保存在服務器上。在內存中創建文本文件並通過ajax返回,可能嗎?

如何在內存中創建文本文件並通過ajax將其返回,以便文件本身返回並且服務器上沒有文件?它不需要是ajax,但我想盡可能避免回發。

+0

你使用webforms還是mvc? – Kamyar 2013-05-10 12:43:37

+0

對不起,使用Webforms,所以使用WebMethods for Ajax – user1166905 2013-05-10 13:05:19

回答

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

唯一的問題,我現在是這將無法在ajax(據我所知)。我有一個屏幕上的項目列表,這是我需要從淘汰賽和下載文件中獲取id的所有jQuery /淘汰賽風格代碼,但我努力通過id。我創建了一個asp:hiddenfield,並使用js更改了該值,但該值爲alyways 0. – user1166905 2013-05-10 15:15:36

+0

正如Kamyar所建議的那樣,您可以使用'HttpHandler' – vijay 2013-05-10 16:05:35

0

維傑的答案是正確的,如果您使用的是MVC或Web表單。

關於防止回發,您不必使用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

相關問題