Gem 如何用 carrierwave 把已有的文件传到 store (云端)??

kee · 2014年02月17日 · 最后由 chaixl 回复于 2014年02月18日 · 3921 次阅读

在服务器生成的文件,想移到 carrierwave 的 store(用的七牛) carrierwave 应该有现成的方法做这事吧?

carrierwave 提供了扩展机制,可以自己开发程序对接各类云存储。Amazon C3, Google Storage 都可以用 fog 这个 gem。七牛的话,如果他们没有提供,就要自己开发了吧。

@birdfrank sorry,没说清楚。是有 gem 的,已经安装,可以上传然后 cache 到 store(七牛) 我是想把服务器生成的文件也 move_to store 里,carrierwave 有没有现成的方法??

写脚本。

#2 楼 @kee 不太明白你说的是哪种服务器生成的文件,是编译过的 ASSETS 还是服务器生成的 PDF,XML 之类的。 如果是后面那种。

@video.avatar = you_file
@user.save

不就会把文件上传上去了么

carrierwave 把文件移到 store,没有现成的方法可用吗? @Rei

@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

cc @Rei @bydmm

一个文件还是多个文件取决于你的 model 的设计。

对 carrierwave 来说,源文件都是来自文件系统的,上传的文件也不过是文件系统中的一个临时文件而已。所以对 carrierwave 来说,是上传的,还是后台程序生成的,区别只是路径的不同。

编辑.. xy problem

@birdfrank 同上, 现在 convert_images 是在 pdfUploader 里 after:cache 做的,此时还没有@doc.save(看到 after:store 后 carrierwave 把 cache 删掉了,就只有 store(七牛)里有 ppt 文件了)

#10 楼 @kee 我看到 carrierwave 有一个 move_to_cache 的 callback,你可以在这里干你想要的事情,这样就可以抓到你要的文件了

感觉现在逻辑也可行

# 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

#12 楼 @kee 不行 你应该传一个 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

@kee 我没用过 sidekiq,我一直用 delayed_job 的。

railscasts 找到案例了 谢谢回复

@bydmm

@photo.image = File.open(extract_output_path) @photo.save

把提取的图片遍历执行上述操作(会重新上传一次到 cache 再到 server,创建 documents),图片一多耗时会很长,即便异步也有点累赘

可以试试直接在服务器上配置七牛的 qrsync 来同步数据,很方便。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号