我在ListView中有一个ImageButton控件,当单击它时,应该下载具有正确ID的图像。
这是ImageButton ASPX:
<asp:ImageButton runat="server" ID="ibtDownloadImage" ImageUrl="img/downloadIcon.png" OnClick="ibtDownloadImage_OnClick" CommandArgument='<%# Convert.ToString(Eval("ID"))+Convert.ToString(Eval("FileExtension")) %>' />
正如您所看到的,当它被点击时,它会执行&#34; ibtDownloadImage_OnClick&#34;方法并将命令参数设置为ID加上FileExtension(例如,1.jpg,这是图像的名称)。
ibtDownloadImageOnClick的我的C#代码是:
protected void ibtDownloadImage_OnClick(object sender, EventArgs e)
{
ImageButton img = (ImageButton)sender;
string file = img.CommandArgument;
String imgURLtoDownload = @"img/uploads/"+file;
Response.AddHeader("Content-Disposition", "attachment; filename=" + imgURLtoDownload);
}
当我点击ImageButton控件时,它会下载一个名为&#34; img-uploads-1.jpg&#34;的文件。 (没有语音标记),所以它似乎采取我想要的文件路径作为名称的一部分,并替换/与-...
有关如何解决此问题的任何想法?这似乎应该是一个简单的解决方案。
我已经在Response.AddHeader行上使用断点运行调试,而imgURLtoDownload的内容是img / upload / 1.jpg(应该是这样)..
答案 0 :(得分:0)
您可以将文件内容读取为二进制文件,假设您具有此功能,将文件名获取字节数组作为二进制内容,并将该函数名称GetFileContent(Filepath)
。然后,您可以使用该函数将内容写入响应,然后指定自定义路径。
ImageButton img = (ImageButton)sender;
string file = img.CommandArgument;
String imgURLtoDownload = @"img/uploads/"+file;
byte[] data= GetFileContent(Server.MapPath(imgURLtoDownload));
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + file);
Response.ContentType = System.Web.MimeMapping.GetMimeMapping(Server.MapPath(imgURLtoDownload));
Response.BinaryWrite(data);
Response.End();
public byte[] GetFileContent(string Filepath)
{
return System.IO.File.ReadAllBytes(Filepath);
}