我目前正在将多张图片上传到Cloudinary作为表单的一部分。问题是Cloudinary uploader一次只允许上传1张图片,所以当我像下面这样上传图片时,post请求非常慢:
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图像与一个属性相关联,因此拥有多个图像非常重要。我尝试与并行gem并行运行上传,但它只是导致我的服务器因为某些未知的原因而冻结。
我还尝试过在表单中选择图像时将图像上传到Cloudinary的想法,然后在某个不确定的时间间隔清除作业中未使用的图像。
你们如何推荐将多张图片上传到cloudinary作为模型的一部分?
发布于 2019-02-22 08:41:51
将多个文件上传到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)下进行多个文件上传。
https://stackoverflow.com/questions/54770889
复制相似问题