无法从 asp.net 中的上传文件夹下载 files/images

Cannot download files/images from uploads folder in asp.net

我需要下载存储在 asp.net 网络应用程序名称为 uploads

的文件夹中的图像

我得到了一个应该下载这个的函数

private void downloadAnImage(string strImage)
{
    Response.ContentType = "image/jpg";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
    Response.TransmitFile(strImage);
    Response.End();
}

我从 link button 调用此函数为

protected void lnkDwnSlc_Click(object sender, EventArgs e)
{
    if (Session["slc_filepath"] != null)
    {                 
         string path = Server.MapPath(Session["slc_filepath"].ToString());
         downloadAnImage(path);
    }
}

其中 Session["slc_filepath"] 是存储在 session 中的路径

但是在 运行 之后,这段代码 file/image 没有下载,我没有收到关于为什么文件没有下载的错误。我使用 breakpoint 检查了文件路径,它是正确的,

我搜索了很多表格 google 但我不明白我遗漏了什么。

编辑: 在页面加载事件中,我从 table 中提取记录,在那里我保存了文件路径,并在会话中将其存储为

Session["slc_filepath"] = dt.Rows[0]["UploadSLC"].ToString();

其中 UploadSLC 是 table 的列名称,我在其中存储图像路径 在数据库中,字符串看起来是

~\uploads\ab071770-473a-4e1a-8cfc-addeccf565d5.jpg

试试这个:

private void downloadAnImage(string strImage)
{
    Response.Clear();
    Response.ContentType = "image/jpg";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
    Response.TransmitFile(strImage);
    Response.Flush();
    Response.End();
}

很高兴为您提供帮助!

我建议解决它的来源问题。

  1. 尝试硬编码路径(以确保您传递的路径正确)

    //try forward or back slash, make sure the file exists
    string path = Server.MapPath("~/uploads/ab071770-473a-4e1a-8cfc-addeccf565d5.jpg"); 
    
  2. 试试这个:

    private void downloadAnImage(string strImage)
    {
        Response.ContentType = "image/jpg";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
        Response.TransmitFile(strImage);
        Response.Flush();
        Response.End();
    }
    
  3. 确保客户端没有抛出 javascript 错误。

从数据库绑定时请更正图片路径

喜欢“~/Image/images.png”。

我的代码片段的 PFB 您可能应该得到解决方案。

protected void Page_Load(object sender, EventArgs e) { 会话["slc_filepath"] = "~/Image/images.png"; }

    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        string path = Server.MapPath(Session["slc_filepath"].ToString());
        downloadAnImage(path);
    }

    private void downloadAnImage(string strImage)
    {
        Response.ContentType = "image/jpg";
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + strImage);
        Response.TransmitFile(strImage);
        Response.End();
    }

像这样使用 ashx 处理程序http://www.intstrings.com/ramivemula/asp-net/how-to-download-files-from-server-to-client-using-a-generic-handler/

然后通过ajax发送一个window.Open到新的ashx。

经过长时间的搜索,我找到了答案,但我得到的提示来自我团队中的后辈,我非常感谢,我刚刚添加了

ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
            scriptManager.RegisterPostBackControl(this.lnkDwnSlc); 

pageLoad 事件中因为我在我的 aspx 页面中使用了更新面板和脚本管理器并且 bootstrap 用于设计所以它停止了功能

这样做之后,它就像一个魅力,

感谢大家的努力和支持,