【问题标题】:Ruby -- Percent Encoding in Uploaded FileRuby -- 上传文件中的百分比编码
【发布时间】:2020-11-25 03:52:53
【问题描述】:

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

示例文件名:Test %AF.txt

样本表格

<form id="upload" enctype="multipart/form-data" 
      action="/object/upload" accept-charset="UTF-8" method="post">
  <label for="file">File:</label>
  <input type="file" name="file" id="file">
</form>

处理上传

puts params[:file].original_filename
puts params[:file].tempfile
puts params[:file].headers

样本输出

Test �.jpg
#<File:0x00005618f8a3e4d8>
Content-Disposition: form-data; name="file"; filename="Test %AF.jpg"
Content-Type: image/jpeg

问题总结

params[:file].original_filename 不能取消编码以恢复“%AF”字符串。

【问题讨论】:

    标签: ruby urlencode


    【解决方案1】:

    这是我对上述问题的解决方案。原始文件名是从上传文件的 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
    
    

    【讨论】:

      猜你喜欢
      • 2011-08-17
      • 1970-01-01
      • 2019-12-04
      • 2012-04-20
      • 2016-05-04
      • 2018-12-11
      • 2014-03-05
      • 1970-01-01
      相关资源
      最近更新 更多