我在我的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。或者,如果你确信文件有效载荷(&任何您需要的元数据)都将出现在名称之后。通常修改上传机制更容易。