我需要将处理程序设置为<asp:Button>
元素。当用户点击时,必须在代码隐藏中生成txt文件,并且必须由用户自动下载。无需从用户那里获取任何数据。所有文件内容都将在代码后面生成。例如,如何向用户返回包含此变量内容的txt文件:
string s = "Some text.\nSecond line.";
答案 0 :(得分:4)
对于这种工作,你应该动态创建文件。 请参阅代码:
protected void Button_Click(object sender, EventArgs e)
{
string s = "Some text.\r\nSecond line.";
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=testfile.txt");
Response.AddHeader("content-type", "text/plain");
using (StreamWriter writer = new StreamWriter(Response.OutputStream))
{
writer.WriteLine(s);
}
Response.End();
}
}
请注意新行,您需要使用\ r \ n而不是仅使用\ n或者为每行使用WriteLine函数
答案 1 :(得分:0)
您只需在服务器端生成文件,然后将其下推给用户即可。 s
将是您将生成的文件的内容。
创建新文件就像将数据写入其中一样简单,
// var s that you're having
File.Create(Server.MapPath("~/NewFile.txt")).Close();
File.WriteAllText(Server.MapPath("~/NewFile.txt"), s);
这将创建一个新文件(如果不存在)并将变量s的内容写入其中。
您可以使用以下代码
允许用户下载它// Get the file path
var file = Server.MapPath("~/NewFile.txt");
// Append headers
Response.AppendHeader("content-disposition", "attachment; filename=NewFile.txt");
// Open/Save dialog
Response.ContentType = "application/octet-stream";
// Push it!
Response.TransmitFile(file);
这将让他拥有你刚创建的文件。
答案 2 :(得分:0)
我确实有一个类似的案例,但有点复杂的用例。
我确实会生成不同类型的文件。我写了一个容器类Attachment,它将内容类型和生成文件的值保存为Base64字符串。
public class Attachment {
public string Name {get;set;}
public string ContentType {get;set;}
public string Base64 {get;set;}
}
这使我能够使用相同的下载方法提供不同的文件类型。
protected void DownloadDocumentButton_OnClick(object sender, EventArgs e) {
ASPxButton button = (ASPxButton) sender;
int attachmentId = Convert.ToInt32(button.CommandArgument);
var attachment = mAttachmentService.GenerateAttachment(attachmentId);
Response.Clear();
Response.AddHeader("content-disposition", $"attachment; filename={attachment.Name}");
Response.AddHeader("content-type", attachment.ContentType);
Response.BinaryWrite(Convert.FromBase64String(attachment.Base64));
Response.End();
}