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,谢谢你的评论,但是我们不想在场景中包含任何后端。不过谢谢你的努力。