使用 JavaScript 将 Blob 转换为文件对象

发布于 2024-08-17 12:36:46 字数 1794 浏览 24 评论 0

有时,您会得到一个 Blob 对象,而您想得到的是 File。例如,当您在响应对象 blob() 上使用时 fetch 。在本快速教程中,我们将探索如何将 Blob 转换为 File。

Fetch

下面的脚本将 fetch 响应转换为 Blob

fetch('./image.jpeg')
    .then((res) => res.blob())
    .then((myBlob) => {
        console.log(myBlob);
        // logs: Blob { size: 1024, type: "image/jpeg" }
    });

但如果我们想要一个呢File

Blob a 和 a之间的主要区别File 在于,File 具有namelastModified 属性,它从中继承了所有其他属性Blob

我们可以采取两种方式,要么我们将这两个属性添加到 ,使其Blob 看起来像File 。或者我们创建一个实际的File 实例。

让 Blob 看起来像文件

让我们将这两个属性添加到我们的Blob 实例(来自上面的请求的实例fetch )中。

myBlob.name = 'image.jpeg';
myBlob.lastModified = new Date();

我们的Blob 现在看起来像一个File 但它不是一个真正的File ,我们可以轻松地检查这一点:

console.log(myBlob instanceof File);
// logs: false

console.log(myBlob);
// logs: Blob { name: "image.jpeg", lastModified: ..., size: 1024, type: "image/jpeg" }

如果我们将其与需要实际对象的第三方脚本一起使用,则可能会导致问题File

创建实际文件

这是更好的方法,它会给我们一个实际的File 对象。

const myFile = new File([myBlob], 'image.jpeg', {
    type: myBlob.type,
});

console.log(myFile);
// logs: File { name: "image.jpeg", lastModified: ..., size: 1024, type: "image/jpeg" }

现在,当我们检查实例时它将是一个File

console.log(myFile instanceof File);
// logs: true

但是,由于它继承自 File 对象,因此 Blob 它也将是 File。

console.log(myFile instanceof Blob);
// logs: true

为什么我们要讨论 quack likes a duck 方法?因为 IE11 不支持File 构造函数,所以如果您仍然需要支持 Internet Explorer,那就只能这么做了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

薯片软お妹

暂无简介

文章
评论
26 人气
更多

推荐作者

橘味果▽酱

文章 0 评论 0

十年九夏

文章 0 评论 0

旧情勿念

文章 0 评论 0

断爱

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文