javascript - 使用 axios 将 Blob URL 转换为文件对象
问题描述
我有一个图像裁剪器,它为每个裁剪创建一个 blob 文件。
当用户完成裁剪后,他单击了一个成功按钮,我得到一个如下所示的 URL:blob: https://localhost:5001/4434606b-29c4-483d-a1fc-1cefe50a3e3a “。因为我需要一个文件对象(所以我可以将其发布到我的服务器)我使用以下代码将此 blob 转换为实际的文件对象:
const file = await fetch(blobUrl).then(r => r.blob()).then(blobFile => new File([blobFile], fileName, { type: blobFile.type }));
此代码有效,但不幸的是,我需要提供 IE11 支持,并且由于不支持 fetch(并且 polyfills 似乎不适用于此 fetch 调用)我想将此语句迁移到 axios(我已经在我的所有地方都使用过)应用)。
这是我尝试过的:
axios.get(blobUrl).then(r => r.blob()).then(blobFile => new File([blobFile], fileName, { type: blobFile.type }));
当我查看第一次调用 ( then(r => r.blob()
) 的响应时,我得到如下信息:
我认为这是因为图像无法在控制台中显示,但是当我尝试调用“r.blob()”时,我得到了这个:
r.blob 不是函数
如何将我的 axios 调用更改为像上面的 fetch 调用一样工作?
旁注:我不知道我的回复将具有哪种文件类型(除了它是图像),因此它可能是 png、jpg、gif 等。
解决方案
显然我尝试的有点矫枉过正。这是对我有用的解决方案:
const config = { responseType: 'blob' };
axios.get(blobUrl, config).then(response => {
new File([response.data], fileName);
});
推荐阅读
- python - 缺少日期和产品/商店组合的python代码
- postgresql - Postgresql COPY 命令问题
- html - 如何创建旁边有 2x3 网格的侧边栏
- c# - 使用 Oid/ASNEncodeData 创建 PublicKey 会引发 CryptographyException
- javascript - 如何通过使用反应或javascript动态计算顶部和左侧位置来相对于两个元素放置一个元素?
- python - 如何使用 .maketrans() 和 .unicodedata() 从 Python 3.x 中删除标点符号和特殊字符?
- javascript - 数据结构和算法
- vb.net - vb.net 表单处理来自另一个表单的事件
- arrays - 查找仅包含二进制数组的最大非连续子集
- multilabel-classification - 使用 multilabel_binarizer 后如何从列号获取类名?