错误:网络连接丢失 - 将表单数据(文件)保存到 R2 存储桶

问题描述 投票:0回答:1

我的工作人员中有这个处理程序:

const data = await event.request.formData();

const key = data.get('filename');
const file = data.get('file');

if (typeof key !== 'string' || !file) {
  return res.send(
    { message: 'Post body is not valid.' },
    undefined,
    400
  );
}

await BUCKET.put(key, file);

return new Response(file);

如果我注释掉

await BUCKET.put(key, file);
行,那么我将得到预期的文件响应。但是在函数中使用该行时,我收到错误:

Uncaught (in promise) Error: Network connection lost.

我已经确认,通过将

put
更改为
get
,我可以从该存储桶中检索文件,因此连接本身似乎没有问题。

cloudflare cloudflare-workers cloudflare-r2
1个回答
0
投票

我刚刚注意到您正在根据请求致电

formData
。这会导致您将对象读入 RAM。 Workers 有 128 MiB 限制,因此可能发生的情况是您超出了该限制(可能非常严重,因为我们确实提供了一些缓冲区),因此 Cloudflare 将终止您的 Worker。

您需要做的是确保上传原始文件(而不是作为表单)并访问原始 ReadableStream。或者,如果您确信文件有效负载(以及您需要的任何元数据)将出现在名称之后,您可以尝试编写 TransformStream 以流式传输方式解析有效负载。通常更改上传机制会更容易。

© www.soinside.com 2019 - 2024. All rights reserved.