Ruby on Rails Cloudinary 上传多张图片

Posted

技术标签:

【中文标题】Ruby on Rails Cloudinary 上传多张图片【英文标题】:Ruby on Rails Cloudinary upload multiple images 【发布时间】:2019-07-13 05:32:22 【问题描述】:

我目前正在将多个图像作为表单的一部分上传到 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】:

将多个文件上传到 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) 下进行多个文件上传。

【讨论】:

以上是关于Ruby on Rails Cloudinary 上传多张图片的主要内容,如果未能解决你的问题,请参考以下文章

Carrierwave Cloudinary 集成 Ruby on Rails

使用 cloudinary 直接上传 - “没有这样的文件或目录”错误,可能是我的 ruby​​ on rails 代码中的某个错误

思考Ruby On Rails的底层代码(Ruby on Rails 開發秘籍 | Ruby on Rails 快速入門)

ruby on rails如何安装

ruby on rails - 问题捆绑安装nokogiri 1.7.2 on ruby on rails 4.x.

Ruby on Rails入门篇