我在下载和打开pdf文件时遇到错误
无法加载PDF文档
。但是当我尝试下载txt文件时,它会完全下载成功。我需要这个ajax请求作为POST方法,所以在网上搜索后我发现了这段代码。
$.ajax({
type: "POST",
url: url,
cache: false,
contentType: false,
processData: false,
success: function (data) {
var blob = new Blob([data]);
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = textName;
link.click();
}, error: function (data) { alert("error"); }});
我使用web api下载文件
public HttpResponseMessage Download(string fileName)
{
string filePath = Path.Combine(PATH, fileName.Replace('/', '\\'));
byte[] pdf = System.IO.File.ReadAllBytes(filePath);
HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new ByteArrayContent(pdf);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "MyPdf.pdf";
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return result;
}
请帮帮我
答案 0 :(得分:0)
引用Download pdf file using jquery ajax
jQuery在使用AJAX请求加载二进制数据时遇到了一些问题 尚未实现某些HTML5 XHR v2功能
它为您提供了两种选择。我不会在这里重复它们,因为它们属于那个答案。检查链接。
在服务器端,我已成功使用此方法下载PDF文件。
[HttpPost]
public HttpResponseMessage Download(string fileName)
{
string filePath = Path.Combine(PATH, fileName.Replace('/', '\\'));
byte[] pdf = System.IO.File.ReadAllBytes(filePath);
//content length for header
var contentLength = pdf.Length;
var statuscode = HttpStatusCode.OK;
var result = Request.CreateResponse(statuscode);
result.Content = new StreamContent(new MemoryStream(buffer));
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
result.Content.Headers.ContentLength = contentLength;
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "MyPdf.pdf";
return result;
}
与原作没有太大区别。
如果从磁盘/数据库读取或者动态生成文件,还应检查以确保服务器上的原始文件没有损坏。
答案 1 :(得分:0)
问题可能是您的Content-Disposition标头。你需要内联,但你有附件。
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline");
您现在所拥有的内容告诉浏览器直接发送文件,而不是尝试在浏览器中显示它。当你这样做时,Chrome的内部PDF查看器会出现阻塞。
更多:Content-Disposition:What are the differences between "inline" and "attachment"?