在嵌入的 pdf 中添加 s3 signed url 不起作用
Adding s3 signed url in embed for a pdf doesn't work
看起来像的url
https://abc.s3.ap-south-1.amazonaws.com/1/2/4/2018/26/pdf.pdf_1537903203247/V0/output/pdf.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=Q434A%2F200926%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20180926T053715Z&X-Amz-Expires=900&X-Amz-Signature=f3996e2401e95e7ebd071187fd55ead39c5296b1cf4d968&X-Amz-SignedHeaders=host
未显示,但 url 已下载 separately.I 已修改 url here.But 实际 url 有效并下载 pdf如果在不同的选项卡中打开。有解决方法吗?
正如@Michael-sqlbot 正确指出的那样。内容类型必须是 application/pdf。 Javascript 参考代码:
var s3 = new AWS.S3({
apiVersion: '2006-03-01',
region: 'ap-abc-1',
params: {
Bucket: BucketName,
ServerSideEncryption: "AES256",
ContentType: 'application/pdf'
}
});
浏览器理解 url 实际上是一个 pdf 是有道理的,有必要将此内容类型添加到 it.However,我想指出对于其他文件- mp3、mp4、jpg、png 等类型。这在我的特殊情况下不是必需的 case.Don不知道它是否普遍适用。
如果你想在 iframe 中打开 pdf 文件,那么你可以从后端编写 base64 字符串,然后将 base64 字符串转换为 blob url 在 UI.
let base64strds = 'base64pdfstring';
// decode base64 string, remove space for IE compatibility
var binary = atob(base64strds.replace(/\s/g, ''));
var len = binary.length;
var buffer = new ArrayBuffer(len);
var viewers = new Uint8Array(buffer);
for (var i = 0; i < len; i++) {
viewers[i] = binary.charCodeAt(i);
}
// create the blob object with content-type "application/pdf"
var blob = new Blob( [viewers], { type: "application/pdf" });
var url = URL.createObjectURL(blob);
var objFra = document.createElement('iframe'); // Create an IFrame.
objFra.style.visibility = "hidden"; // Hide the frame.
objFra.src = url; // Set source.
document.body.appendChild(objFra); // Add the frame to the web page.
objFra.contentWindow.focus(); // Set focus.
objFra.contentWindow.print();
看起来像的url
https://abc.s3.ap-south-1.amazonaws.com/1/2/4/2018/26/pdf.pdf_1537903203247/V0/output/pdf.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=Q434A%2F200926%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20180926T053715Z&X-Amz-Expires=900&X-Amz-Signature=f3996e2401e95e7ebd071187fd55ead39c5296b1cf4d968&X-Amz-SignedHeaders=host
未显示,但 url 已下载 separately.I 已修改 url here.But 实际 url 有效并下载 pdf如果在不同的选项卡中打开。有解决方法吗?
正如@Michael-sqlbot 正确指出的那样。内容类型必须是 application/pdf。 Javascript 参考代码:
var s3 = new AWS.S3({
apiVersion: '2006-03-01',
region: 'ap-abc-1',
params: {
Bucket: BucketName,
ServerSideEncryption: "AES256",
ContentType: 'application/pdf'
}
});
浏览器理解 url 实际上是一个 pdf 是有道理的,有必要将此内容类型添加到 it.However,我想指出对于其他文件- mp3、mp4、jpg、png 等类型。这在我的特殊情况下不是必需的 case.Don不知道它是否普遍适用。
如果你想在 iframe 中打开 pdf 文件,那么你可以从后端编写 base64 字符串,然后将 base64 字符串转换为 blob url 在 UI.
let base64strds = 'base64pdfstring';
// decode base64 string, remove space for IE compatibility
var binary = atob(base64strds.replace(/\s/g, ''));
var len = binary.length;
var buffer = new ArrayBuffer(len);
var viewers = new Uint8Array(buffer);
for (var i = 0; i < len; i++) {
viewers[i] = binary.charCodeAt(i);
}
// create the blob object with content-type "application/pdf"
var blob = new Blob( [viewers], { type: "application/pdf" });
var url = URL.createObjectURL(blob);
var objFra = document.createElement('iframe'); // Create an IFrame.
objFra.style.visibility = "hidden"; // Hide the frame.
objFra.src = url; // Set source.
document.body.appendChild(objFra); // Add the frame to the web page.
objFra.contentWindow.focus(); // Set focus.
objFra.contentWindow.print();