Hi, I am building a file upload feature on my site, and I am using a regular HTTP form to upload the file. I am reading the file portion into an AsyncIterable, creating a ReadablStream from that, and passing it to my R2 bucket binding’s put() method. I get an error like this one:
TypeError: Provided readable stream must have a known length (request/response body or readable half of FixedLengthStream)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async eval (/Users/ryan/projects/remix-cloudflare-template-test/app/utils/R2UploadHandler.ts:40:22)
at async Module.parseMultipartFormData (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/server-runtime/dist/formData.js:51:17)
at async action (/Users/ryan/projects/remix-cloudflare-template-test/app/routes/_index.tsx:45:20)
at async Object.callRouteActionRR (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/server-runtime/dist/data.js:35:16)
at async callLoaderOrAction (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/router/dist/router.cjs.js:4151:16)
at async submit (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/router/dist/router.cjs.js:3505:16)
at async queryImpl (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/router/dist/router.cjs.js:3463:22)
at async Object.queryRoute (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/router/dist/router.cjs.js:3432:18)
at async handleDataRequestRR (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/server-runtime/dist/server.js:122:20)
at async requestHandler (/Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/server-runtime/dist/server.js:94:18)
at async /Users/ryan/projects/remix-cloudflare-template-test/node_modules/@remix-run/dev/dist/vite/cloudflare-proxy-plugin.js:70:25
I’m guessing there’s an easier way to provide an uploaded file to the put method. Does anyone have suggestions? Seems like a vary basic use case of R2 API from Pages.
Thank you!
Ryan