Ruby——上传文件中的百分比编码

Ruby——上传文件中的百分比编码,ruby,urlencode,Ruby,Urlencode,我在Ruby中处理文件上载时遇到了一个问题,文件名中包含的字符似乎是百分比编码的 示例文件名:Test%AF.txt 样本表格 文件: 处理上传 样本输出 测试�.jpg # 内容配置:表单数据;name=“file”;filename=“测试%AF.jpg” 内容类型:图像/jpeg 问题摘要 params[:file]。无法取消对原始文件名的编码以还原“%AF”字符串。以下是我对上述问题的解决方案。原始文件名是从上载文件的headers属性中提取的 def uploaded_fil

我在Ruby中处理文件上载时遇到了一个问题,文件名中包含的字符似乎是百分比编码的

示例文件名:
Test%AF.txt
样本表格

文件:
处理上传 样本输出
测试�.jpg
#
内容配置:表单数据;name=“file”;filename=“测试%AF.jpg”
内容类型:图像/jpeg
问题摘要
params[:file]。无法取消对原始文件名的编码以还原“%AF”字符串。

以下是我对上述问题的解决方案。原始文件名是从上载文件的headers属性中提取的

  def uploaded_filename
    filename = params[:file].original_filename
    unless filename.valid_encoding?
      begin
        m = /filename="([^"]+)"/.match(params[:file].headers)
        filename = m[1] if m
      rescue StandardError
        filename = filename.encode('UTF-8', invalid: :replace, undef: :replace)
      end
    end
    filename
  end

Test �.jpg
#<File:0x00005618f8a3e4d8>
Content-Disposition: form-data; name="file"; filename="Test %AF.jpg"
Content-Type: image/jpeg
  def uploaded_filename
    filename = params[:file].original_filename
    unless filename.valid_encoding?
      begin
        m = /filename="([^"]+)"/.match(params[:file].headers)
        filename = m[1] if m
      rescue StandardError
        filename = filename.encode('UTF-8', invalid: :replace, undef: :replace)
      end
    end
    filename
  end