异步Carrierwave上传 - 参数化文件名

时间:2016-06-22 19:28:00

标签: ruby-on-rails-4 carrierwave

我们在使用Carrierwave时遇到了一些麻烦,我将尝试解释我们的问题。

我们需要在API中生成端点以将图像上传到AWS S3,这些图像仅对前端有意义,因此我们没有将载波上传器与模型相关联。我们也处理了一些图像版本。

到目前为止我们能够完成这项工作,但我们想要异步执行此过程,因此我们需要预先定义图像及其所有版本的文件名。 我们能够向上传者发送预定义的文件名,但上传者只使用该文件名作为原始版本,版本存储为前缀(“small_.jpg”,“medium_.jpg”,...)所以他们被覆盖了。

我发现这是关于自定义文件名的: How to: Customize your version file namesCarrierWave: Create the same, unique filename for all versioned files

这两个链接对于理解问题很有用,我们甚至将它用于其他上传者,但我们的问题有点不同

如果有人在类似或有想法的地方工作过,我会非常乐于助人!

非常感谢!

更新

添加一些代码(2016/06/24)

这是我的控制器代码:

class MyController < ApplicationController
    def upload
        base64_string = params[:resource]
        file_name = SecureRandom.uuid + ".jpg" #<= The filename I wanted to parameterize
        # This code should be delayed =>
        base64 = Base64.decode64(base64_string.partition(',').last)
        image = MiniMagick::Image.read(base64)
        uploader = MyUploader.new
        File.open(image.path) { |file| something = uploader.store!(file) }
        # <=
        return file_name
    end
end

我的上传代码:

class MyUploader < CarrierWave::Uploader::Base

    include CarrierWave::MiniMagick

    storage :fog

    def store_dir
      "some/custom/dir/"
    end

    version :large do
       process :resize_to_fit => [630, 450]
    end

    version :medium, :from_version => :large do
       process :resize_to_fit => [420, 300]
    end

    version :small, :from_version => :large do
       process :resize_to_fit => [315, 225]
    end

    def filename
      "#{secure_token}.jpg"
    end

    protected

    def secure_token
       SecureRandom.uuid
    end
end

上传器中的'secure_token'方法被定义为解决方法。我想使用控制器中定义的'file_name'

0 个答案:

没有答案