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

Flutter使用S3预签名URL上传时请求体无效问题求助

问题分析与解决

报错Invalid argument(s): Invalid request body "[object File]"的核心原因是http.put的body参数不能直接传入File对象,Flutter的http库无法直接处理File类型作为请求体,必须先将文件转换为二进制字节数据。

修改后的代码

Future<void> uploadfile(String url, File image, String type) async {
  var urls = Uri.parse(url);
  try {
    // 读取文件的二进制字节数据
    final fileBytes = await image.readAsBytes();
    var response = await http.put(
      urls,
      body: fileBytes, // 传入字节数据而非File对象
      headers: {
        "Content-Type": "image/$type", // 确保type对应实际格式,比如jpeg/png
      },
    );
    print("response status code: ${response.statusCode}");
  } catch (e) {
    print("error: $e");
    throw ('Error uploading photo');
  }
}

关键说明

  • 必须通过readAsBytes()将File转为字节数组,这是http请求体接受的有效格式
  • Content-Type设置要匹配文件实际类型:
    • 图片:image/jpeg、image/png等(对应type参数传jpeg/png)
    • 文本文件:改为text/plain(如果是JSON文本则用application/json)
  • 上传文本文件时,同样需要先读取文件内容(readAsString()或readAsBytes()),不能直接传File对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:10:32