我需要从s3.amazonaws.com获取PDF文件,当我使用Postman(或直接粘贴到浏览器中)查询它时,它加载良好。但是,当我尝试为它生成文件路径(稍后传递给查看器)时,它不起作用:
fetch(<S3URL>).then(res => res.blob()).then(blob => {
// THIS STEP DOES NOT WORK
let myBlob = new Blob(blob, {type: 'application/pdf'});
// expect something like 'www.mysite.com/my-file.pdf'
let PDFLink = window.URL.createObjectURL(myBlob);
return PDFLink;
}
我正在使用Autodesk的Forge PDF查看器,它可以很好地处理本地PDF文件:
let myPDFLink = 'public/my-file.pdf';
Autodesk.Viewing.Initializer(options, () => {
viewer = new Autodesk.Viewing.Private.GuiViewer3D(document.getElementById('forgeViewer'));
viewer.start();
viewer.loadExtension('Autodesk.PDF').then( () => {
viewer.loadModel(myPDFLink, viewer); // <-- works fine here
});
});
// from https://github.com/wallabyway/offline-pdf-markup
那么,我如何从S3 URL(例如s3.amazonaws.com/com.autodesk.oss-persistent/0d/ff/c4/2dfd1860d1...
)到PDF查看器可以理解的东西(即在URL中有.pdf
扩展)?
我知道对于JSON文件,我需要做res.json()
来提取JSON内容,但对于pdf,我应该如何处理res
对象?
注意:我无法控制S3 URL。当我想从他们的BIM360门户网站下载文档时,Autodesk会生成一个临时的S3链接。
我尝试了很多选项,唯一可以显示通过API调用获取的PDF的方法是使用object元素:
<object data='<PDF link>' type='application/pdf'>
将下载的blob转换为base64不能工作。将PDF链接放在iframe中也不起作用(它仍然下载而不是显示)。我读过的所有选项只有在pdf是前端应用程序的一部分(即本地文件,而不是从远程服务器获取的东西)时才有效。