【问题标题】:CarrierWave: Uploads and saves original file...I don't want it toCarrierWave:上传并保存原始文件......我不希望它
【发布时间】:2013-09-26 12:01:32
【问题描述】:

我正在使用 carrierwave_backgrounder 在使用 Sidekiq 的后台进程中将图像上传到 S3。

这是我的 background_uploader.rb 类...

class BackgroundUploader < CarrierWave::Uploader::Base
  include ::CarrierWave::Backgrounder::Delay
  include CarrierWave::RMagick
  include CarrierWave::MimeTypes
  process :set_content_type

  # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
  include Sprockets::Helpers::RailsHelper
  include Sprockets::Helpers::IsolatedHelper

  storage :fog

  def store_dir
    "uploads/backgrounds/#{model.id}"
  end

  def default_url
    "/assets/default.jpg"
  end

  process :resize_to_fit => [1024, 1024]
  process :convert => 'jpg'
  process :fix_exif_rotation

  def extension_white_list
    %w(jpg jpeg png)
  end

  def filename
    @name ||= Digest::MD5.hexdigest(File.dirname(current_path.to_s))
    "#{@name}.#{file.extension}" if original_filename
  end

  # Rotates the image based on the EXIF Orientation & applies gaussian blur
  def fix_exif_rotation
    manipulate! do |img|
      img.auto_orient!
      img = yield(img) if block_given?
      img = img.gaussian_blur(0.0, 20.0)
      img
    end
  end

end

carrierwave_backgrounder.rb

CarrierWave::Backgrounder.configure do |c|
  c.backend :sidekiq, queue: :carrierwave
end

background.rb 包含:

mount_uploader :image, BackgroundUploader
process_in_background :image

然后我运行sidekiq -q carrierwave 来启动后台工作人员。一切正常!上传一个文件,我看到队列接受它并开始工作......

如果我立即打开我的 AWS S3 控制台,我会在其中看到原始文件。未调整大小且未模糊。一旦工作完成......我刷新 S3 并且有调整大小/模糊的版本。现在两个图像都在那里,但我只希望模糊图像在那里。在我看来,我使用...

 <%= image_tag(@background.image.to_s) %>

它显示原始文件。如果我选中复选框以删除文件,它会按照应有的方式执行(从 S3 中删除原始文件),但模糊版本会保留在那里。

上传到 S3 的内容...

  • original.jpg(立即...我根本不想上传)
  • modified.jpg(作业完成后)

长话短说:我不希望将原始文件上传到 S3。

【问题讨论】:

  • 扩展名为“.jpg”的文件是否会发生这种情况?
  • 发生 .jpg、.png 等...我也尝试过引用 wiki article here,但没有成功。

标签: ruby-on-rails image-processing amazon-s3 carrierwave sidekiq


【解决方案1】:

我认为您的问题是 filename 方法,carrierwave 可能依赖该方法来查找(并删除)原始文件。如果您使用的文件名在最初存储时和处理时之间没有变化,问题会消失吗?

【讨论】:

  • 你是绝对正确的。感谢您的帮助塔沃。由于文件名的变化,它失去了对文件的引用(如你所提到的)。一切都修复了,我的后台作业处理也正常工作了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
相关资源
最近更新 更多