Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在嵌入中为pdf添加s3签名url不会';行不通_Html_Pdf_Amazon S3_Embed_Pre Signed Url - Fatal编程技术网

Html 在嵌入中为pdf添加s3签名url不会';行不通

Html 在嵌入中为pdf添加s3签名url不会';行不通,html,pdf,amazon-s3,embed,pre-signed-url,Html,Pdf,Amazon S3,Embed,Pre Signed Url,看起来像 https://abc.s3.ap-south-1.amazonaws.com/1/2/4/2018/26/pdf.pdf_1537903203247/V0/output/pdf.pdf?X-Amz算法=AWS4-HMAC-SHA256&X-Amz-Credential=Q434A%2F200926%2Fap-south-1%2Fs3%2Faws4_请求&X-Amz-Date=20180926T053715Z&X-Amz-Expires=900&X-Amz-Signature=F399

看起来像
https://abc.s3.ap-south-1.amazonaws.com/1/2/4/2018/26/pdf.pdf_1537903203247/V0/output/pdf.pdf?X-Amz算法=AWS4-HMAC-SHA256&X-Amz-Credential=Q434A%2F200926%2Fap-south-1%2Fs3%2Faws4_请求&X-Amz-Date=20180926T053715Z&X-Amz-Expires=900&X-Amz-Signature=F3996E2401E95E7EBD071187FD55EAD395C5296B1CF4D968&X-Amz-SignedHeaders=host


没有显示,但是url会单独下载。我在这里修改了url。但是如果在其他选项卡中打开,实际的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是有道理的,有必要将此内容类型添加到其中。但是,我想指出,对于其他文件类型,如mp3、mp4、jpg,png等。这在我的特殊情况下不是必需的。不知道这是否普遍正确。

如果您想在iframe中打开pdf文件,那么您可以从后端编写base64字符串,然后在UI中将base64字符串转换为blob url

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();   

let base64strds='base64pdfstring';
//解码base64字符串,删除空间以实现IE兼容性
var binary=atob(base64strds.replace(/\s/g');
var len=二进制长度;
var缓冲区=新阵列缓冲区(len);
var viewers=新的Uint8Array(缓冲区);
对于(变量i=0;i
你的实际问题是什么?@JohnRotenstein我从s3签名url获取的pdf不会加载到html的嵌入标记中。但是其他本地pdf文件会加载。我如何才能让它工作?在s3控制台中,当你检查对象元数据时,它是否显示
内容类型:application/pdf
?@Michael sqlbot它是application/octet stream,如果它是application/pdf,它会出现吗?但我有另一个问题。我正在以块或多部分的形式上载此文件。我不确定我是否可以使用application/pdf并仍然可以使用多部分上载。是的,你可以。这是在启动多部分上传时完成的。嗨,Rohit,谢谢你的评论,但是我们不想在场景中包含任何后端。不过谢谢你的努力。