简体   繁体   English

Rails回形针图像保存

[英]Rails paperclip image save

When using paperclip, if i try to enter the url like so (in a create function after a picture saves 当使用回形针时,如果我尝试输入这样的URL(在图片保存后的创建功能中)

image = Magick::ImageList.new('public' + @picture.photo.url)

i get the error 我收到了错误

Magick::ImageMagickError in PicturesController#create

no decode delegate for this image format `public/system/photos/115/original/Kitchener-2011103100531.jpg?1321026621' @ error/constitute.c/ReadImage/532

if i try to enter 如果我试着进入

@picture.latitude = EXIFR::JPEG.new('public' + @picture.photo.url).gps_lat

to just deal with the exif data i get 只处理我得到的exif数据

Errno::ENOENT in PicturesController#create

No such file or directory - public/system/photos/116/original/Kitchener-20111031-00531.jpg?1321026744

When i try doing photo.url in a rails console it gives good format, but in my controller adds some weird garbage '?1321026621' at the end. 当我尝试在rails控制台中执行photo.url时,它提供了良好的格式,但在我的控制器中添加了一些奇怪的垃圾'?1321026621'。 How do i fix this? 我该如何解决? (a regex looks easy to fix this, but is there a better approach than this) (正则表达式看起来容易解决这个问题,但有没有比这更好的方法)

From the paperclip github project : 来自paperclip github项目

https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/attachment.rb https://github.com/thoughtbot/paperclip/blob/master/lib/paperclip/attachment.rb

# Returns the public URL of the attachment with a given style. This does
# not necessarily need to point to a file that your Web server can access
# and can instead point to an action in your app, for example for fine grained
# security; this has a serious performance tradeoff.
#
# Options:
#
# +timestamp+ - Add a timestamp to the end of the URL. Default: true.
# +escape+    - Perform URI escaping to the URL. Default: true.
#
# Global controls (set on has_attached_file):
#
# +interpolator+  - The object that fills in a URL pattern's variables.
# +default_url+   - The image to show when the attachment has no image.
# +url+           - The URL for a saved image.
# +url_generator+ - The object that generates a URL. Default: Paperclip::UrlGenerator.
#
# As mentioned just above, the object that generates this URL can be passed
# in, for finer control. This object must respond to two methods:
#
# +#new(Paperclip::Attachment, Paperclip::Options)+
# +#for(style_name, options_hash)+
def url(style_name = default_style, options = {})
  default_options = {:timestamp => @options.use_timestamp, :escape => true}

  if options == true || options == false # Backwards compatibility.
    @url_generator.for(style_name, default_options.merge(:timestamp => options))
  else
    @url_generator.for(style_name, default_options.merge(options))
  end
end

By default paperclip appends a timestamp parameter, pass :timestamp => false to the url method of your attachment: 默认情况下,paperclip会附加一个timestamp参数,pass :timestamp => false到附件的url方法:

image = Magick::ImageList.new('public' + @picture.photo.url(:original, :timestamp => false))

# => "public/system/photos/115/original/Kitchener-2011103100531.jpg"

Edit: Actually, looks like they changed the option name since this didn't work for me with Paperclip 2.4.0. 编辑:实际上,看起来他们更改了选项名称,因为这对我来说不适用于Paperclip 2.4.0。 After inspecting my own source, the option is :use_timestamp but on github it's :timestamp - choose which one depending on the version of Paperclip you're using. 在检查我自己的源之后,选项是:use_timestamp但是在github上它是:timestamp - 根据你正在使用的Paperclip的版本选择哪一个。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM