Moh*_*ain 5 ruby-on-rails image paperclip stringio
我想从旧网站导入一些图标.这些图标的大小小于10kb.因此,当我尝试将图标导入其返回的stringio.txt文件时.
require "open-uri"
class Category < ActiveRecord::Base
has_attached_file :icon, :path => ":rails_root/public/:attachment/:id/:style/:basename.:extension"
def icon_from_url(url)
self.icon = open(url)
end
end
Run Code Online (Sandbox Code Playgroud)
在rake任务中.
category = Category.new
category.icon_from_url "https://xyz.com/images/dog.png"
category.save
Run Code Online (Sandbox Code Playgroud)
Kev*_*tre 35
尝试:
def icon_from_url(url)
extname = File.extname(url)
basename = File.basename(url, extname)
file = Tempfile.new([basename, extname])
file.binmode
open(URI.parse(url)) do |data|
file.write data.read
end
file.rewind
self.icon = file
end
Run Code Online (Sandbox Code Playgroud)
要覆盖Paperclip中的"假文件上载"的默认文件名(stringio.txt在小文件上或在较大文件上几乎随机的临时名称),您有两种主要可能性:
original_filename在IO上定义一个:
def icon_from_url(url)
io = open(url)
io.original_filename = "foo.png"
self.icon = io
end
Run Code Online (Sandbox Code Playgroud)
您还可以从URI获取文件名:
io.original_filename = File.basename(URI.parse(url).path)
Run Code Online (Sandbox Code Playgroud)
或者替换:basename你的:path:
has_attached_file :icon, :path => ":rails_root/public/:attachment/:id/:style/foo.png", :url => "/:attachment/:id/:style/foo.png"
Run Code Online (Sandbox Code Playgroud)
记得总是改变:url你改变的时候:path,否则icon.url方法会出错.
您还可以定义自己的自定义插值(例如:rails_root/public/:whatever).
| 归档时间: |
|
| 查看次数: |
11316 次 |
| 最近记录: |