我有一个带有图片库的ListView作为源,每张图片我有一个asp:LinkButton代表一个下载按钮。按下我的按钮应该打开浏览器下载框。我正在使用以下代码来实现这一目标:
public void Download_Click(object source, EventArgs e)
{
LinkButton button = (LinkButton)source;
string url = Server.UrlEncode(button.CommandArgument);
FileInfo fileInfo = new FileInfo(url);
if (fileInfo.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Flush();
Response.WriteFile(fileInfo.FullName);
}
else
{
//error
}
}
在那段代码上,我正在使用Server.Encode(“fileName”),但我尝试了Server.Map并使用了“PicLibraryName / FileName”和“Application / PictureLibraryName / FileName”,但我从来没有得到FileInfo.Exists为真,因为我总是得到FileNotFoundException或System.Web.HttpException(当我使用虚拟路径时)。
任何人都知道解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
我认为您应该使用WebClient.DownloadData(url)
下载文件,然后使用Response.OutputStream.Write
方法输出下载数据,也不要忘记使用Response.End()
这样的结束响应:
var wc=new System.Net.WebClient();
var data=wc.DownloadData(url);
Response.Clear();
//add headers..
Response.OutputStream.Write(data);
Response.End();