如何使用 URL.createObjectURL?

Posted

技术标签:

【中文标题】如何使用 URL.createObjectURL?【英文标题】:How to use URL.createObjectURL? 【发布时间】:2017-07-25 19:08:36 【问题描述】:

我的目标是创建一个表单,将 URL 提交到端点,该端点返回一个 PDF 的 base64 编码,该 PDF 显示在屏幕上没有window.open弹出窗口。

我想要的示例输出:https://s.natalian.org/2017-04-04/index.html

我很困惑如何使用生成的 objectURL 来显示 data:application/pdf;base64 响应。

https://s.natalian.org/2017-04-04/ObjectURL.html 我假设我没有正确解码 base64 响应?我不知道如何让它像上面想要的输出一样呈现为 PDF。

【问题讨论】:

blob ? - 那么,服务器返回什么?如果是 blob,则将 response.blob() 返回到链中的下一个 .then(您还没有) 服务器返回 base64 那么你需要什么?一个斑点?一个数据URI?别的东西?您没有任何代码可以“在屏幕上”显示结果,那么,您将如何做到这一点? 我可以使用 window.open,但我不想使用它,因为它会在 Chrome 中导致弹出窗口并且在 Safari 中根本不起作用。 另外两个选项是 <iframe><object> 【参考方案1】:

正如 Surma 在 cmets 中指出的那样:“如果你想使用 Blob(),你的服务器应该返回一个二进制 PDF”,而我的端点的问题是它返回了一个 base64 编码的响应。

我已经研究出如何使无服务器响应以二进制形式并在此处发布代码:https://github.com/calvintychan/serverless-html-pdf/pull/2

【讨论】:

【参考方案2】:

您现在如何显示 PDF?看来你需要像https://github.com/mozilla/pdf.js 这样的东西来做到这一点而不依赖插件。如果您需要 URL,从 Blob 对象获取 blob URL 似乎是最直接的。

【讨论】:

也许这是一个小问题,但我看不到如何从 jsfiddle.net/kaihendry/h0u4vLn3/8 访问生成的 URL ... 'blob:fiddle.jshell.net/8d385365-4471-4c92-af08-59dff4454142' 不起作用。 你应该可以把它放在<a> 或类似的地方,然后点击它。

以上是关于如何使用 URL.createObjectURL?的主要内容,如果未能解决你的问题,请参考以下文章

使用URL.createObjectURL()预览图片

Jest URL.createObjectURL 不是函数

URL.createObjectURL和URL.revokeObjectURL

URL.createObjectURL和URL.revokeObjectURL的应用

vue使用URL.createObjectURL() 和懒加载优化加载图片的技巧

vue使用URL.createObjectURL() 和懒加载优化加载图片的技巧