我目前正在努力将多个图像作为表单的一部分上传到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?
答案 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)下进行多个文件上传。