javascript - 使用 blob (react) 创建文件时出错:对象必须具有可调用的 @@iterator 属性
问题描述
我正在使用https://www.npmjs.com/package/react-image-file-resizer来获取我上传的文件并调整它的大小,然后再将其发送到进行一些分析的后端 API。
现在我收到错误:
TypeError:无法构造“文件”:对象必须具有可调用的@@iterator 属性
我的理解是文件构造函数可以将 blob 作为第一个参数,并且 resizer 函数正在提供该 blob。所以,我不确定我在哪里短路。我确实知道我的输入很好,因为我在同一个组件中调用了另一个调整器(它提供了调整大小文件的 base64 编码版本,我在处理之前显示为原始图像)
相关代码为:
uploadImageHandler = (event) => {
const tempImage = event.target.files[0];
const imageType = tempImage.type;
Resizer.imageFileResizer(
tempImage,
300,
300,
imageType,
100,
0,
(uri) => {
const file = new File(uri, tempImage.name);
},
'blob',
);
};
当我uri
在尝试执行之前执行控制台登录时,new File
它会返回
Blob {size: 127332, type: "image/image/jpeg"}
size: 127332
type: "image/image/jpeg"
__proto__: Blob
arrayBuffer: ƒ arrayBuffer()
size: (...)
slice: ƒ slice()
stream: ƒ stream()
text: ƒ text()
type: (...)
constructor: ƒ Blob()
Symbol(Symbol.toStringTag): "Blob"
get size: ƒ size()
get type: ƒ type()
__proto__: Object
解决方案
我的理解是文件构造函数可以将 blob 作为第一个参数,并且 resizer 函数正在提供该 blob。
这几乎是正确的:)。如果我们仔细阅读规范:
句法
new File(bits, name[, options]);
bits
一个数组!!!,
ArrayBuffer
,ArrayBufferView
,Blob
...
所以我想如果你改变你的代码:
...
(uri) => {
const file = new File(uri, tempImage.name);
...
至:
...
(uri) => {
const file = new File([uri], tempImage.name);
...
它应该没有您描述的问题。
这只是我的猜测 - 我没有测试它!
推荐阅读
- firebase - 有什么办法可以在 Firebase 中进行逻辑 OR
- html - 如何让提交按钮与我的复选框一起使用
- ruby-on-rails - 如何追踪 Rails 应用程序中的内存泄漏?
- css - 如何在一次调用多个 API 时显示加载屏幕?
- python - 在 linux 上,使用 bash 脚本如何重命名 Excel 文件以在现有文件名的末尾包含行数
- python - Python:解析 csv 数据并加载到数据框
- aws-lambda - 在 AWS lambda 中使用 Spring 云配置服务器
- android - 倒数计时器中的 Kotlin setText 错误:不能使用提供的参数调用以下函数:
- windows - 是否可以获得 XInput 设备的名称、产品 ID、供应商 ID 或其他类型的唯一标识符?
- npm - npm install 不适用于特定模块:async/each