Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spread syntax requires ...iterable[Symbol.iterator] to be a function #34

Open
danieltan007 opened this issue Feb 4, 2024 · 2 comments

Comments

@danieltan007
Copy link

danieltan007 commented Feb 4, 2024

hello
im trying to add heic file in my next js 14 app with formData on my windows machine using this code

const data = await req.formData();
const kk = data.get("kk") as File;
const kk_buffer = kk && kk instanceof Blob ? await kk.arrayBuffer() : undefined;
if (kk.name.split(".")[1] === "heic" || kk.name.split(".")[1] === "heif") {
	const kk_converted = await convert({
	  buffer: kk_buffer,
	  format: "JPEG",
	});
  console.log("🚀 ~ kk_converted:", kk_converted)
}

and i got error like this: Spread syntax requires ...iterable[Symbol.iterator] to be a function

is this because im upload from my windows machine?

@nicobret
Copy link

nicobret commented Feb 8, 2024

Hi
Same error here, on macOs.

My code:

export async function convertImage(file, format = "PNG") {
  const blob = new Blob([file], { type: "image/heif" });
  const buffer = await blob.arrayBuffer();
  const outputBuffer = await convert({ buffer, format });
  const blob2 = new Blob([outputBuffer], { type: `image/${format.toLowerCase()}` });
  const image = new File([blob2], `${file.name}.${format.toLowerCase()}`, { type: blob.type });
  return image;
}

The error:

heic-convert_browser.js?v=9e2a22c5:2552 Uncaught (in promise) TypeError: Spread syntax requires ...iterable[Symbol.iterator] to be a function
    at uint8ArrayUtf8ByteString (heic-convert_browser.js?v=9e2a22c5:2552:21)
    at isHeic (heic-convert_browser.js?v=9e2a22c5:2555:26)
    at decodeBuffer (heic-convert_browser.js?v=9e2a22c5:2585:14)
    at one (heic-convert_browser.js?v=9e2a22c5:2606:42)
    at convert (heic-convert_browser.js?v=9e2a22c5:2671:31)
    at one (heic-convert_browser.js?v=9e2a22c5:2686:66)
    at convertImage (file.service.js?t=1707385570317:35:30)
    at async handleChange (FileImport.jsx:13:15)

@catdad
Copy link
Member

catdad commented Feb 9, 2024

Thanks for providing your code.

I did not verify this, but this is probably my fault for not documenting the types. The buffer argument is supposed to be a Uint8Array and not an ArrayBuffer (it's also weird that something called an ArrayBuffer would not be iterable, but that's not the point), since node buffers are really just fancy Uint8Arrays. I believe you can just do const buffer = new Uint8Array(await blob.arrayBuffer()) to convert that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants