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

Ruby使用RestClient向Kotlin服务批量传文件失败的解决方案

问题:使用rest-client向Kotlin服务上传多文件时触发400错误,提示"Required request part 'files' is not present"

环境

  • Ruby 3.1.2p20
  • Rails 7.0.4.2
  • rest-client 2.0.2
  • Kotlin服务端点接收List<MultipartFile>类型参数

问题现象

单个文件上传可正常运行,但上传两个及以上文件时,Kotlin端返回400错误,提示:

Required request part 'files' is not present

尝试过的传参方式(均失败)

  • 将文件数组作为payload的files值:
request = @http_client_class.new(
          method: :post,
          url: path,
          payload: { multipart: true, files: files },
          headers: build_header(headers)
        )
  • 重复设置files键(Ruby哈希会覆盖,仅发送第二个文件,compare_by_identity方法无效):
request = @http_client_class.new(
  method: :post,
  url: path,
  payload: {
    :multipart => true,
    :files => files[0],
    :files => files[1]
  },
  headers: build_header(headers)
)
  • 使用不同键名传文件:
payload = {
  file1: File.new(file1_path, 'rb'),
  file2: File.new(file2_path, 'rb')
}

问题原因排查

rest-client在处理文件列表时,会通过Utils.flatten_params方法将参数名从files自动修改为files[],但Kotlin服务期望接收的参数名是files,导致参数不匹配触发错误。

解决方案

更换为Net::HTTP::Post::Multipart库构建多文件上传请求,避免rest-client自动修改参数名的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:02:41