无法从asp.net的uploads文件夹下载文件/图像

时间:2015-11-05 10:39:11

标签: c# asp.net .net webclient-download

我需要将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

中的路径

但运行此代码文件/图像后没有下载,我没有得到关于为什么文件没有下载的错误。我使用breakpoint检查了文件路径,这是正确的,

我搜索了很多形式谷歌,但我无法理解我错过了什么。

修改 在页面加载事件我从表中拉记录我保存文件的路径,在会话中我存储它像

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

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

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

5 个答案:

答案 0 :(得分:0)

试试这个:

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 :(得分:0)

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

  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错误。

答案 2 :(得分:0)

请在从数据库绑定时更正您的图像路径

喜欢"〜/ Image / images.png"。

我的代码片段的PFB你可能会得到解决方案。

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

    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();
    }

答案 3 :(得分:0)

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

的ashx处理程序

然后通过ajax发送一个窗口。打开新的ashx。

答案 4 :(得分:0)

我经过长时间的搜索后找到了答案,但我得到的提示是我团队中的大三学生我真的很感激,我刚刚补充

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

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

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

感谢您的所有努力和支持,