在嵌入的 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();