在服务器生成的文件,想移到 carrierwave 的 store(用的七牛) carrierwave 应该有现成的方法做这事吧?
carrierwave 提供了扩展机制,可以自己开发程序对接各类云存储。Amazon C3, Google Storage 都可以用 fog 这个 gem。七牛的话,如果他们没有提供,就要自己开发了吧。
@birdfrank sorry,没说清楚。是有 gem 的,已经安装,可以上传然后 cache 到 store(七牛) 我是想把服务器生成的文件也 move_to store 里,carrierwave 有没有现成的方法??
@bydmm 服务器生成的 PDF,XML 之类 想通过 carrierwave 上传文件到 store 的逻辑移到七牛
user.avatar = you_file #这个只有文件路径,而且多个文件,怎么处理?是否直接用carrierwave部分逻辑更直接?
@user.save
我是想把用户上传的 ppt 转成图片显示给访问 在 uploader 类里
after :cache, :docsplit
def docsplit
# extract images
Docsplit.extract_images()
# move to store
end
一个文件还是多个文件取决于你的 model 的设计。
对 carrierwave 来说,源文件都是来自文件系统的,上传的文件也不过是文件系统中的一个临时文件而已。所以对 carrierwave 来说,是上传的,还是后台程序生成的,区别只是路径的不同。
@birdfrank 同上, 现在 convert_images 是在 pdfUploader 里 after:cache 做的,此时还没有@doc.save(看到 after:store 后 carrierwave 把 cache 删掉了,就只有 store(七牛)里有 ppt 文件了)
感觉现在逻辑也可行
# pdfuploader
after :cache, :docsplit
def docsplit
# convert images output cache pach
end
# doc model
field :images, :type => Array, :default => []
mount_uploader :file, PdfUploader
# docs c
def create
@doc.images = # 取出uploads cache路径下所有images
@doc.save
end
@bydmm @doc.images = file_path 即可吗?上传时给的是FILE
@birdfrank 按下实现了转化后图片的上传,怎么异步来执行 def extract_images 呢??我安装了 sidekiq
# pdfmodel
after_create :extract_images
def extract_images
# extract
@photo = self.photos.new
@photo.image = File.open(extract_output_path)
@photo.save
end
@bydmm 用
@photo.image = File.open(extract_output_path) @photo.save
把提取的图片遍历执行上述操作(会重新上传一次到 cache 再到 server,创建 documents),图片一多耗时会很长,即便异步也有点累赘