我想要做的是用户选择网格上的一些字段,根据这些数据,我在Web服务器上创建一个xml文件,然后我希望用户下载它就像下载任何文件一样。但问题是,我不能使用这段代码:
Response.ContentType = "APPLICATION/OCTET-STREAM";
// initialize the http content-disposition header to
// indicate a file attachment with the default filename
// "myFile.txt"
System.String disHeader = "Attachment; Filename=\"" + fileName +
"\"";
Response.AppendHeader("Content-Disposition", disHeader);
FileInfo downloadFile = new FileInfo(fileFullName);
if (downloadFile.Exists)
{
Response.WriteFile(downloadFile.FullName);
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
因为我需要让用户下载3个文件,所以标题无法识别它,我想要的是获取文件名并打开弹出窗口,用链接按钮列出文件名,然后用户可以下载它。 / p>
对于每个文件,我在运行时创建一个linkbutton并添加以下代码:
lnkProblem.Text = "Problemler dosyası";
lnkProblem.Visible = true;
lnkProblem.Command += new CommandEventHandler(lnkUser_Command);
lnkProblem.CommandName = Request.QueryString["fileNameProblems"];
lnkProblem.CommandArgument = Request.QueryString["fileNameProblems"];
然后使用此功能让用户下载:
void lnkUser_Command(object sender, CommandEventArgs e)
{
Response.ContentType = "APPLICATION/XML";
System.String disHeader = "Attachment; Filename=\"" + e.CommandArgument.ToString() +
"\"";
Response.AppendHeader("Content-Disposition", disHeader);
FileInfo downloadFile = new FileInfo(Server.MapPath(".") + "\\xmls\\" + e.CommandArgument.ToString());
if (downloadFile.Exists)
{
Response.WriteFile(Server.MapPath(".") + "\\xmls\\" + e.CommandArgument.ToString());
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
应用程序创建了xml文件,但在某处,app将html标记放在该xml文件中,因此无法打开文件,无论如何都要这样做吗?也许还有其他任何例子......
答案 0 :(得分:3)
将文件发送到客户端的cleaneast方式是使用这样的TransmitFile方法:
FileInfo file = new FileInfo(filePath); // full file path on disk
Response.ClearContent(); // neded to clear previous (if any) written content
Response.AddHeader("Content-Disposition",
"attachment; filename=" + file.Name);
Response.AddHeader("Content-Length", file.Length.ToString());
Response.ContentType = "text/xml"; //RFC 3023
Response.TransmitFile(file.FullName);
Response.End();
对于多个文件,一个常见的解决方案是将所有文件打包到一个zip文件中并发送它们(在这种情况下,mime类型将是application / zip)。
答案 1 :(得分:1)
创建一个单独的IHttpHandler
,它只会提供您希望用户下载的文件,并Redirect
创建lnkUser_Command
中的该处理程序。