You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Deno Oak处理Post请求时解析form-data/JSON报错求助

问题描述

我用Deno搭配Oak和Deno KV开发一个S3服务克隆项目,解析Post请求form-data里的文件或base64文本时总是报错:
Uncaught (in promise) Error: Caught error from readSlice()withoutpartial property
测试短字符串能正常解析,但用JSON传相同内容也会报同样的错;传base64字符串则触发另一个错误:

error: Uncaught (in promise) Interrupted: operation canceled 
const ab = await this.#request.arrayBuffer();

我的处理器代码是:

const body = await ctx.request.body({ type: "form-data" });
const data = await body.value.read();
解决方案

1. 修正form-data读取逻辑

Oak的form-data解析需要通过迭代器完整读取所有片段,不要直接调用read(),改用循环遍历:

const body = await ctx.request.body({ type: "form-data" });
const formData = new FormData();
for await (const part of body.value) {
  if (part.name && part.value) {
    formData.append(part.name, part.value);
  }
}
// 正常获取数据示例
const file = formData.get("file");
const base64Content = formData.get("base64Content");

2. 解决请求中断问题

出现operation canceled通常是请求超时或读取不完整导致,可做以下调整:

  • 增加Oak的请求超时配置:
const app = new Application({
  serverConstructor: {
    timeout: 30000, // 设为30秒,可根据业务需求调整
  },
});
  • 确保客户端发送请求时未提前断开(比如测试时不要中途取消Postman请求)。

3. 校验请求头

确认请求的Content-Type严格为multipart/form-data且包含正确的边界(boundary),部分客户端可能未自动生成边界值,会导致解析失败。

内容的提问来源于stack exchange,提问作者Miguelo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:09:51