大型 pdf 文件未在具有 aws 签名 url 的浏览器中打开
Posted
技术标签:
【中文标题】大型 pdf 文件未在具有 aws 签名 url 的浏览器中打开【英文标题】:Large pdf files are not opening in browser with aws signed url 【发布时间】:2022-01-15 21:20:48 【问题描述】:我正在使用 NodeJS 将文件上传到 s3,并在上传时为 pdf 设置正确的 contentType。它看起来像这样,
const params =
Bucket: "noob_bucket",
Key: newFileName,
Body: fs.createReadStream(path),
ContentType: 'application/pdf',
ACL: 'private',
;
现在的问题是,当我尝试使用签名 URL 显示 pdfon 浏览器时,只有当文件大小大约小于 25MB 时,它才会在浏览器中打开,否则它只是在下载文件。
谁能帮我解决这个问题。我也有 > 50MB 的文件。
请帮我解决这个问题。提前致谢
【问题讨论】:
【参考方案1】:控制 PDF 文件是否作为附件显示或下载的标题是 content-disposition
标题。如果要在浏览器中显示内容,则应为inline
。
上传文件时可以在参数中明确设置:
const params =
Bucket: "noob_bucket",
Key: newFileName,
Body: fs.createReadStream(path),
ContentType: 'application/pdf',
ContentDisposition: 'inline',
ACL: 'private',
;
此外,您可能希望在请求预签名 url 时设置它:
const command = new GetObjectCommand(
Bucket: 'noob_bucket',
Key: newFileName,
ResponseContentDisposition: 'inline',
ResponseContentType: 'application/pdf',
);
const url = await getSignedUrl(s3Client, command, expiresIn: 3600 );
【讨论】:
不清楚为什么小 PDF(低于 25MB)打开,但大的下载。 另外,默认的内容配置是内联的。如果缺少内容处置标头是这里的原因,这进一步提出了问题。 问题是我必须为 pdf 制作 ResponseContentDisposition: 'inline', ResponseContentType: 'application/pdf'。谢谢@Ervin。 ?以上是关于大型 pdf 文件未在具有 aws 签名 url 的浏览器中打开的主要内容,如果未能解决你的问题,请参考以下文章
AWS S3 生成签名 URL ''AccessDenied''
仅从浏览器使用预签名 URL 上传时出现 AWS S3 CORS 错误
带有签名 URL 的 AWS CloudFront:403 访问被拒绝