解决方法
@ russellb的评论几乎让我在那里,但不太正确.如果你有一个名为@file的Refile :: File,你需要:
fileIO = @file.to_io.to_io mm = MiniMagick::Image.open(fileIO) mm.width # image width mm.height # image height
是的,这是两次调用#to_io> …<第一个to_io给你一个Tempfile,这不是MiniMagick想要的.希望这有助于某人! – 更新 – 额外的皱纹:如果文件非常小(< ~20kb,from:ruby-forum.com/topic/106583),这将失败,因为你不会从to_io获得临时文件,而是获取StringIO.如果你得到一个StringIO,你需要分叉代码并执行:
mm = MiniMagick::Image.read(fileio.read)
所以我的完整代码现在是:
# usually this is a Tempfile; but if the image is small,it will be # a StringIO instead >:[ fileio = file.to_io if fileio.is_a?(StringIO) mm = MiniMagick::Image.read(fileio.read) else file = fileio.to_io mm = MiniMagick::Image.open(file) end