How to update/rename a carrierwave uploaded file?

后端 未结 6 1329
我在风中等你
我在风中等你 2021-02-04 20:30

I cant figure out how to update/rename a file uploaded/managed with Carrierwave-mongoid in rails 3.2.6. I want to rename the file in the db as well as on the filesystem.

<
6条回答
  •  孤街浪徒
    2021-02-04 21:09

    I store image files -- and derivative versions -- in an S3-compatible solution. I use Carrierwave (1.2.2) with the "fog-aws" gem (3.0.0) on Rails 5.1. The following public method works for me when added to the "uploader" file (eg, app/uploaders/example_uploader.rb):

    class ExampleUploader < CarrierWave::Uploader::Base
      
    
      # Renames original file and versions to match given filename
      #
      # Options:
      # * +:keep_original+ - Do not remove original file and versions (ie, copy only)
      def rename(new_filename, options = {})
        return if !file || new_filename == file.filename
        target = File.join(store_path, new_filename)
        file.copy_to(target)
        versions.keys.each do |k|
          target = File.join(store_path, "#{k}_#{new_filename}")
          version = send(k).file
          version.copy_to(target)
        end
        remove! unless options[:keep_original]
        model.update_column(mounted_as, new_filename) && model.reload
      end
    
      
    end
    

提交回复
热议问题