小编Cup*_*ils的帖子

由于bot,Ruby on Rails"UTF-8中的无效字节序列"

我有一些由中国机器人触发的错误:http://www.easou.com/search/spider.html滚动我的网站时.

我的应用程序的版本都使用Ruby 1.9.3和Rails 3.2.X

这里是一个堆栈跟踪:

An ArgumentError occurred in listings#show:

  invalid byte sequence in UTF-8
  rack (1.4.5) lib/rack/utils.rb:104:in `normalize_params'


-------------------------------
Request:
-------------------------------

  * URL       : http://www.my-website.com
  * IP address: X.X.X.X
  * Parameters: {"action"=>"show", "controller"=>"listings", "id"=>"location-t7-villeurbanne--58"}
  * Rails root: /.../releases/20140708150222
  * Timestamp : 2014-07-09 02:57:43 +0200

-------------------------------
Backtrace:
-------------------------------

  rack (1.4.5) lib/rack/utils.rb:104:in `normalize_params'
  rack (1.4.5) lib/rack/utils.rb:96:in `block in parse_nested_query'
  rack (1.4.5) lib/rack/utils.rb:93:in `each'
  rack (1.4.5) lib/rack/utils.rb:93:in `parse_nested_query'
  rack (1.4.5) lib/rack/request.rb:332:in `parse_query'
  actionpack (3.2.18) lib/action_dispatch/http/request.rb:275:in `parse_query'
  rack (1.4.5) …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails utf-8 ruby-on-rails-3 ruby-1.9.3

51
推荐指数
2
解决办法
1万
查看次数

回形针:从带有扩展名的网址上传

我想通过paperclip在S3存储上传网址中的图片.我合作:

Ruby 1.9.3
Rails 3.2.6
paperclip 3.1.3
aws-sdk 1.3.9
Run Code Online (Sandbox Code Playgroud)

我有我的图片模型:

class Asset

  has_attached_file :asset,
    :styles => {:thumb => "60x60>"},
    :storage => :s3,
    :s3_credentials => "#{Rails.root}/config/s3.yml",
    :path => "/pictures/:id/:style.:extension"

  validates_attachment_content_type :asset, :content_type => ['image/gif', 'image/jpeg', 'image/png', 'image/x-ms-bmp']

end 
Run Code Online (Sandbox Code Playgroud)

所以基本上我这是从URL下载我的文件:

picture = Asset.new(asset: open("http://www.my_url.com/my_picture.jpg"))
picture.save
Run Code Online (Sandbox Code Playgroud)

但它使用错误的file_name保存我的文件,并且它没有设置文件的扩展名:

#<Asset id: 5, asset_file_name: "open-uri20120717-6028-1k3f7xz", asset_content_type: "image/jpeg", asset_update_at: nil, asset_file_size: 91565, created_at: "2012-07-17 12:41:40", updated_at: "2012-07-17 12:41:40">
p.asset.url
  => http://s3.amazonaws.com/my_assets_path/pictures/5/original.
Run Code Online (Sandbox Code Playgroud)

如你所见,没有扩展名.

我找到了解决它的方法,但我确信我可以有更好的方法.这个解决方案是在我的计算机上复制文件,然后我在S3上发送它,如下所示:

filename = "#{Rails.root}/tmp/my_picture.jpg"
open(filename, 'wb') do |file|
  file << open("http://www.my_url.com/my_picture.jpg").read
end

picture = Asset::Picture.new(asset: …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails heroku paperclip ruby-on-rails-3

13
推荐指数
1
解决办法
4527
查看次数