如何指定一个文件的文件名,它通过一个ASHX下载用户下载?

这是我第一次写代码,允许用户下载其他用户上传的文件。

我写了一个ASHX文件,download.ashx,其代码如下所示:

s = context.Request.QueryString.ToString(); byte[] buffer = new ReplacementTicketFileIO().GetSpecifiedFile(s); context.Response.BinaryWrite(buffer); context.Response.Flush(); context.Response.End();

当用户点击一个链接,用适当的查询字符串来download.ashx,文件下载,但浏览器要显示在浏览器窗口中的内容。 如果链路上用户右键点击,他就可以下载文件,但该文件默认的名称download.ashx。

我想完成两件事情:

1)我想是能够指定下载基于查询字符串在用户设备上的文件的默认名称。

例如,如果用户点击download.ashx?linkedfile = car.pdf,我想为浏览器默认car.pdf该文件的名称。

2)我想为在浏览器默认为保存的链路,而不是在浏览器窗口中打开链接。

它是合理的,我想这样做,或是否有更好的方式来下载文件? 请告诉我。

--------------解决方案-------------

将内容处置HTTP标头。 例如

Content-Disposition: attachment; filename=hello.jpg

您可以通过这样做,在C#中:

Response.AddHeader("Content-Disposition", "attachment; filename=hello.jpg");

下面是我对Excel文件,我相信它会强制下载,而不是一个新的窗口。 没有为查询字符串的网页属性。 你只需要捕获的查询字符串,并在此代码中使用它,以及确定的内容类型。 该的String.Format给你干净的代码。

private string _ExcelFilename
{
get
{
return (Request.QueryString["xls"] != null) ? Request.QueryString"xls"] : "bis";
}
}

Page.Response.Clear();
Page.EnableViewState = false;
Page.Response.Clear();
Page.Response.ContentType = "application/vnd.ms-excel";
Page.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}_{1}.xls", _ExcelFilename, DateTime.Now.ToString("yyyyMMdd")));
Page.Response.Write(excel);
Page.Response.Flush();
Page.Response.End();

分类:asp.net 时间:2015-03-15 人气:1
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.689 (s). 10 q(s)