Response.AddHeader将文件路径视为文件名

时间:2014-10-30 15:57:18

标签: c# asp.net

我在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(应该是这样)..

1 个答案:

答案 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);
}