尝试使用Response.TransmitFile在ASP.Net中下载文件"无法找到路径的一部分"

时间:2014-06-11 21:19:00

标签: c# asp.net download

我使用ASP.Net Webforms和C#下载我存储在物理路径上的文件。 (C:\用户\公用\ Temp)中。由于我没有将文件存储在服务器上,因此我使用物理位置从.aspx处理程序使用以下代码片段下载文件

        HttpRequest request = System.Web.HttpContext.Current.Request;
        HttpResponse response = System.Web.HttpContext.Current.Response;
        String fileName = request.QueryString["fileName"];
        String storagePath = "C:/Users/Public/Temp/";
        String filePath = String.Format("{0}/{1}", storagePath, fileName);
        response.ClearContent();
        response.Clear();
        response.ContentType = "application/octet-stream";
        response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
        response.TransmitFile(filePath);
        response.Flush();
        response.End();

我从帖子here获得了参考。但是,当我通过点击按钮启动下载时,我得到了

  

"无法找到C部分:/ Users / Public / Temp /"

关于异常的

消息。我不确定这是因为文件夹不在服务器上。我需要添加到文件路径中吗?请帮我理解我哪里错了。如果有更好的下载方式,请建议。

(这是我正在研究的原型,我将扩展到网络位置)

1 个答案:

答案 0 :(得分:0)

我认为这是因为fileName查询字符串为空(由于回发)。相当蹩脚,我以前没有找到它。在这种情况下,TransmitFile正在获取“C:/ Users / Public / Temp /”的路径,但不是实际的文件路径,因此也就是错误。

现在,我使用ViewState保存fileName的数据,而TransmitFile获取完整路径C:/ Users / Public / Temp / fileName,它可以正常工作。