Ruby open-uri open方法丢失文件扩展名打开图像

Jim*_*mmy 13 ruby open-uri paperclip

我正在使用ruby 1.9.2以及Rails 3.1.4和Paperclip 2.4.5.

我的问题是尝试从URI中保存回形针附件会丢失文件扩展名并保存文件而不会导致出现像fancybox这样需要扩展名的问题.

一些示例代码:

uri = "http://featherfiles.aviary.com/2012-06-13/bbe5f0de1/0c5a672b88ea47ecb4631ac173e27430.png"
open(uri)
#=> #<File:/var/folders/zc/d69gxhzx10x_bvjrkqgyjgxr0000gn/T/open-uri20120613-27204-i6cldv>
Run Code Online (Sandbox Code Playgroud)

因为临时文件没有扩展名,回形针正在保存文件而不会导致文件出现问题.

有没有人遇到过这个问题?我已经看到有关使用paperclip存储来自URI的图像的多个答案,但似乎没有解决我们正在运行的相同问题

the*_*Man 5

不要使用临时文件!在从端口读取文件时,它作为占位符存在,并且应该被视为OpenURI. 相反,open(url).read通过保存结果内容来使用和处理它。

做类似的事情:

require 'uri'
require 'open-uri'

url = 'http://www.iana.org/domains/example/index.html'
filename = File.basename(URI.parse(url).path)
File.open(filename, 'wb') do |fo|
  fo.write(open(url).read)
end
Run Code Online (Sandbox Code Playgroud)

在操作(尤其是网络操作)期间临时假脱机到磁盘是很常见的。一旦文件的内容累积起来,就可以将其传递给应用程序。read正在阻塞,因此您的代码将在那里停止,直到文件返回给您。然后你就可以玩了。


fat*_*tty 0

我不确定这对您的情况是否有帮助,但我在我的项目中注意到类似的问题。

事实证明,该问题不是由Paperclipnor引起的open-uri,而是由回形针文件的接收者引起的(在我的情况下Spree Commerce)。检查您是否将回形针对象分配给了正确的对象,并且它是否被正确解释。

对我有用的修复方法是更改​​:

@product.images << Spree::Image.create({ 
    :attachment => open(image_url) 
}, :without_protection => true)
Run Code Online (Sandbox Code Playgroud)

@product.master.images << Spree::Image.create({ 
    :attachment => open(image_url) 
}, :without_protection => true)
Run Code Online (Sandbox Code Playgroud)

祝你的问题好运