gpt4 book ai didi

javascript - createObjectURL 重载解析失败

转载 作者:行者123 更新时间:2023-12-05 00:24:09 28 4
gpt4 key购买 nike

我正在尝试从后端将 PDF 加载为 JavaScript 中的 blob,但收到 Failed to execute 'createObjectURL' on 'URL': Overload resolution failed .我真的不知道从这里去哪里。我看过其他一些帖子,但似乎都没有处理 PDF,只有音频。createObjectURL 的文档说:“新的对象 URL 表示指定的 File 对象或 Blob 对象”,所以我不确定我做错了什么。 (https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL)
从我的后端,我设置:Content-type: application/octet-stream然后期望能够设置 iFrame 源,但它不起作用。
我可以验证 Blob 数据实际上是从后端返回的。
这是使用 blob 的 JS 代码。

iframe.src = URL.createObjectURL(data);

编辑1:
我被要求编辑我的问题,为什么建议的先前帖子不能解决我的问题。这是我在下面评论中的复制/粘贴:
我确实已经看到该帖子并且接受的答案是:“考虑避免 createObjectURL() 方法,而浏览器正在禁用对它的支持。只需将 MediaStream 对象直接附加到 HTMLMediaElement 的 srcObject 属性,例如元素。”我不是 JavaScript 专家,但我认为 MediaStream 行不通。

编辑2:
感谢 David Caldwell,在他的评论中他提到了“src/srcObject”,这让我对 MediaStream 的文档更加了解。我现在有一些不会出错的东西。我所需要的只是该 blob 的正确 Mime,因此我可以在 iFrame src 中使用它。
这是我现在返回 srcObject 的内容:
var binaryData = [];
binaryData.push(data); //My blob
var foo = URL.createObjectURL(new Blob(binaryData, {type: "application/text"}));
console.log(foo); //gives me the correct object
我应该使用“文本”的 Mime 吗?我需要将该对象分配给 iFrame src。

编辑3:
使用 text/plain 的 MIME ,我在 DOM 中得到以下信息:
<iframe id="iframe-target" src="blob:http://192.168.112.12/e25a4404-8233-44f0-86b3-1fff1109805f" width="100%" height="100%">
#Document
<html>
<head></head>
<body>
<pre style="word-wrap: break-word; white-space: pre-wrap;">[object Object]</pre> <--'object Object' is the issue
</body>
</html>
</iframe>
我现在在 iframe 中看到 blob 对象,但 iframe 中的 HTML 显示为对象。该对象实际上是一个 PDF,但实际上,我无法查看它。我仍然认为这是一个 MIME 问题,但我不确定该使用什么。

最佳答案

我认为您仍然可以使用 Content-type: application/pdf在响应中,重点是接收有效的 blob。
创建对象 URL 时,假设 data仍然是你的 blob,你应该这样做:

var blobObj = new Blob([atob(data)], { type: "application/pdf" });
var url = window.URL.createObjectURL(blobObj);
document.getElementById("iframe-target").setAttribute("src", url);
在这里,发生了一些事情:
  • dataatob() 转换回二进制
  • 然后将此二进制数据作为字节数组传递给 Blob()构造函数
  • Blob 对象与 MIME 类型一起使用以创建对象 URL
  • 生成的对象 URL 可用作 iframe
  • 的 src 属性

    我创建了一个片段作为一个小演示,在这里你可以选择一个本地的 PDF 文件,它将被转换为 base64,然后用作 src iframe 中的属性。见源代码 on CodeSandboxsee the demo of the sandbox here .

    更新:删除了嵌入的片段。
    @K J在评论中指出,运行嵌入的代码段或从 CodeSandbox 编辑器会产生错误。
    乍一看,浏览器似乎阻止了生成的 blob URL。这是因为 window.URL.createObjectURL prepends the blob URL differently based on the origin .
    这在生产中不是问题,但会使解决方案的演示更加困难。幸运的是,CodeSandbox 将应用程序部署到主机,其中 blob URL 方案和主机将匹配应用程序 URL:
    blob URL matches the host
    在这种情况下,PDF 将按预期显示。我测试过 the deployed version of the sandbox在 Chrome、Safari 和 Firefox 上。

    关于javascript - createObjectURL 重载解析失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65346277/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com