如何使用C#在客户端计算机上下载文件

时间:2015-11-02 14:19:04

标签: c# asp.net google-chrome

我试图在客户端的计算机上下载文件。没有客户的知识,我不会尝试这样做。该文件已存储在服务器上。我有文件路径,我尝试了下面的方法。但它似乎不起作用。我使用的是当前版本的Google Chrome。它一直在失败。

try{
            string Filpath = ParseRequest.GetFileDetails(fileId);
            FileInfo file = new FileInfo(Filpath);
            string fileLength = file.Length.ToString();
            string fileName = file.Name;
            string fullName = file.FullName;                
            if (file.Exists)
            {
                Response.ClearContent();                    
                Response.ContentType = "application/pdf";                   
                Response.AddHeader("Content-Length", fileLength);
                Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);                  
                Response.Write(fullName);
                Response.Flush();
                Response.Close();
            }else{
                Response.Write("This file does not exist.");
            }
        }catch(Exception ex){
            XLog.Error(ex);
        }

以下是我得到的回复的屏幕截图: enter image description here

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试在AJAX请求后面调用文件下载(通过content-dispostion: attachment标头)。出于明显的安全原因,浏览器不允许这样做。因此,只需导航到调用服务器上的下载操作的URL,而不是尝试获取AJAX请求的结果。

window.location = "path/to/downloadaction.aspx/GetFile/?fileId=xxx";

您指定的标题将指示浏览器发出请求,但浏览器不会执行重定向到页面的响应,而是显示文件下载对话框,并将您保留在单击按钮的页面上。 / p>

如果您需要POST数据以执行文件下载请求,您可以使用嵌入式<iframe> - 遗憾的是,他们仍然可以解决AJAX文件限制。

编辑 Alex K.在评论中也是正确的,您需要通过Response.BinaryWrite(pdfBytes)将文件的字节添加到回复中,因此您需要{{1}在某处。