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

如何在转发用户提交文件时保留原始文件名?

问题解决:转发文件时保留原始文件名

问题原因

直接传递File.open(file.tempfile)时,HTTParty会读取临时文件的系统文件名作为上传文件名,而非我们需要的original_filename。此外手动设置Content-Type: multipart/form-data可能导致请求边界处理异常,干扰正确的文件上传格式。

解决方案

修改HTTParty请求的body参数,显式指定文件名、文件流和内容类型,同时移除手动设置的multipart/form-data头(HTTParty会自动处理):

params[:files].each do |file|
  HTTParty.post(
    "https://example.com/files",
    headers: {
      "Accept" => "application/json"
    },
    body: {
      "file" => [file.tempfile, file.original_filename, file.content_type]
    }
  )
end

可选写法(哈希格式)

如果更偏好哈希结构,也可以这样写:

params[:files].each do |file|
  HTTParty.post(
    "https://example.com/files",
    headers: {
      "Accept" => "application/json"
    },
    body: {
      "file" => {
        io: file.tempfile,
        filename: file.original_filename,
        content_type: file.content_type
      }
    }
  )
end

关键说明

  • 数组格式[io, filename, content_type]和哈希格式{io: ..., filename: ..., content_type: ...}都是HTTParty支持的文件上传参数格式,会正确将原始文件名和内容类型带入请求。
  • 移除手动设置的Content-Type头,避免HTTParty自动生成的请求边界和手动设置的头冲突,确保multipart请求格式正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:18:35