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



我在我的worker中有这个处理程序:

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,我可以从该桶中检索文件,因此连接本身似乎没有问题。

这个问题还在吗?我需要你的账号来弄清楚发生了什么。如果你在Discord上发我(Vitali),你的账号ID (&我可能可以帮助你(或者直接发邮件到cloudflare.com,使用vlovich作为帐户,如果你没有/不想注册Discord)。我是R2的技术主管。

编辑2022-09-07。

我刚刚注意到你在请求时打电话给formData。这会导致您将对象读入RAM。Worker有一个128 MiB的限制,所以很可能发生的事情是你超过了这个限制(可能非常严重,因为我们确实提供了一些缓冲区),因此Cloudflare正在终止你的Worker。

你要做的是确保上传原始文件(不是作为表单)并访问原始的ReadableStream。或者,如果你确信文件有效载荷(&任何您需要的元数据)都将出现在名称之后。通常修改上传机制更容易。

最新更新