Ruby on Rails Cloudinary上传多个图像

时间:2019-02-19 16:30:09

标签: ruby-on-rails cloudinary

我目前正在努力将多个图像作为表单的一部分上传到Cloudinary。问题是Cloudinary上载器一次只允许上载1张图像,因此当我上载如下图像时,发帖请求非常缓慢:

params[:photos].each do |_, photo|
  uploaded_photo = Cloudinary::Uploader.upload(photo.tempfile)
  photo = Photo.new(property: @property, public_id: uploaded_photo[:public_id.to_s])
  photo.save
end

图像与一个属性相关联,因此拥有多个图像非常重要。我曾尝试与Parallel gem并行运行上传,但是由于某些未知原因,这只是导致服务器冻结。

我也想过要在表单上选择图像时将图像上传到Cloudinary,然后以不确定的时间间隔清除作业中所有未使用的图像的想法。

你们会如何建议将多个图像作为模型的一部分上传到cloudinary?

1 个答案:

答案 0 :(得分:0)

将多个文件上传到Cloudinary的一种方法是创建单独的线程:

photos = [] # Array of photos to upload
threads = []
number_of_threads = 3

chunk_size = photos.size/number_of_threads
chunks = photos.each_slice(chunk_size).to_a
chunks.each do |res|
    threads << Thread.new {     
        # Add code here to do the upload to Cloudinary
    }
end
threads.each { |thr| thr.join }

您可以先将所有图像上传到Cloudinary,然后更新模型,或者在每个线程的末尾更新模型。我不明白为什么那里应该有一个问题。我不建议使用多个线程,因为如果您同时有许多用户上载内容,这可能会消耗服务器上的大部分资源。另外,Cloudinary网站确实建议使用其jQuery插件在其Ruby SDK文档(https://cloudinary.com/documentation/rails_image_and_video_upload#additional_jquery_library_features)下进行多个文件上传。