如何在JS中保存PDF文件(来自ajax)
How to save PDF file in JS (from ajax)
我使用PHP获取,因为我需要从其他服务器下载一个PDF文件。要下载此文件,我需要登录,客户端不必登录。
问题是用户得到的PDF文件只是一个白页。
在我的服务器上,当我将内容写入文件时,里面仍然有内容 (file_put_contents("test.pdf",$content);
)
我在发送之前尝试对其进行 base64 编码,并发现传送的数据仍然正确。所以它在解码(atob(data)
)或下载功能时失败。
(我也试过utf8编码)
在下载的pdf文件中,有很多字符与这些框或问号(��)交换。
$result = curl_exec($ch);
file_put_contents("test.pdf",$result); //test.pdf contains correct document
echo base64_encode($result);
download(atob(data),"My.pdf") //data is answer of ajax request
function download(data, filename, type) {
var file = new Blob([data], {
type: type
});
if (window.navigator.msSaveOrOpenBlob) // IE10+
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
setTimeout(function () {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
}
要显示 pdf(或任何其他文件类型),您必须设置内容类型等以响应 header 以便浏览器正确解析并显示。这是我为向用户提供 pdf 内容而编写的代码的一小部分。
$file = '/home/public_html/DriveMode/DRIVES/java.pdf'; //path to file
$filename = 'filename.pdf';
header('Content-type: application/pdf'); //setting content type in header
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
readfile($file); // reads and writes the file to output buffer
希望这对你有帮助,如果这里有什么地方令人困惑,请在评论中告诉我。
问题在于 BLOB 构造函数中的隐式 UTF8 编码。
更多信息 .
我使用PHP获取,因为我需要从其他服务器下载一个PDF文件。要下载此文件,我需要登录,客户端不必登录。
问题是用户得到的PDF文件只是一个白页。
在我的服务器上,当我将内容写入文件时,里面仍然有内容 (file_put_contents("test.pdf",$content);
)
我在发送之前尝试对其进行 base64 编码,并发现传送的数据仍然正确。所以它在解码(atob(data)
)或下载功能时失败。
(我也试过utf8编码)
在下载的pdf文件中,有很多字符与这些框或问号(��)交换。
$result = curl_exec($ch);
file_put_contents("test.pdf",$result); //test.pdf contains correct document
echo base64_encode($result);
download(atob(data),"My.pdf") //data is answer of ajax request
function download(data, filename, type) {
var file = new Blob([data], {
type: type
});
if (window.navigator.msSaveOrOpenBlob) // IE10+
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
setTimeout(function () {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
}
要显示 pdf(或任何其他文件类型),您必须设置内容类型等以响应 header 以便浏览器正确解析并显示。这是我为向用户提供 pdf 内容而编写的代码的一小部分。
$file = '/home/public_html/DriveMode/DRIVES/java.pdf'; //path to file
$filename = 'filename.pdf';
header('Content-type: application/pdf'); //setting content type in header
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
readfile($file); // reads and writes the file to output buffer
希望这对你有帮助,如果这里有什么地方令人困惑,请在评论中告诉我。
问题在于 BLOB 构造函数中的隐式 UTF8 编码。
更多信息