我试图在客户端的计算机上下载文件。没有客户的知识,我不会尝试这样做。该文件已存储在服务器上。我有文件路径,我尝试了下面的方法。但它似乎不起作用。我使用的是当前版本的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);
}
答案 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}在某处。