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
相关产品推荐
相关产品推荐

