From 3327fa3039d402082f1590b104ea20d6f59179d3 Mon Sep 17 00:00:00 2001 From: Bohung Date: Mon, 3 Jan 2022 22:23:32 +0800 Subject: [PATCH] Fix bug. --- app/models/ad_image.rb | 2 +- app/uploaders/banner_image_uploader.rb | 90 ++++++++++++++++++++++++++ 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 app/uploaders/banner_image_uploader.rb diff --git a/app/models/ad_image.rb b/app/models/ad_image.rb index 7d92fab..8f89051 100644 --- a/app/models/ad_image.rb +++ b/app/models/ad_image.rb @@ -4,7 +4,7 @@ class AdImage include Mongoid::Document include Mongoid::Timestamps - mount_uploader :file, ImageUploader + mount_uploader :file, BannerImageUploader mount_uploader :video_file, BannerUploader mount_uploader :video_file_webm, BannerUploader diff --git a/app/uploaders/banner_image_uploader.rb b/app/uploaders/banner_image_uploader.rb new file mode 100644 index 0000000..6da9cd1 --- /dev/null +++ b/app/uploaders/banner_image_uploader.rb @@ -0,0 +1,90 @@ +# encoding: utf-8 +require 'carrierwave/processing/mime_types' + +class BannerImageUploader < CarrierWave::Uploader::Base + + # Include RMagick or MiniMagick support: + # include CarrierWave::RMagick + # include CarrierWave::MiniMagick + include CarrierWave::MiniMagick + include CarrierWave::MimeTypes + + # Choose what kind of storage to use for this uploader: + storage :file + # storage :fog + + # Override the directory where uploaded files will be stored. + # This is a sensible default for uploaders that are meant to be mounted: + def store_dir + "uploads/banner_image/#{mounted_as}/#{model.id}" + end + + # override + def filename + @original_filename + end + + # override + def original_filename=(filename) + @original_filename = super(filename) + + if(@original_filename.bytesize > 200) + original_file_extension = File.extname(@original_filename) + + @original_filename.force_encoding("ascii-8bit") + @original_filename = @original_filename[0, (200 - original_file_extension.bytesize)] + @original_filename.encode!("UTF-16BE", "UTF-8", :invalid => :replace, :undef => :replace, :replace => '') + @original_filename.encode!("UTF-8") + + @original_filename += original_file_extension + end + + @original_filename + end + + def fix_exif_rotation + manipulate! do |img| + img.tap(&:auto_orient) + end + end + # Provide a default URL as a default if there hasn't been a file uploaded: + # def default_url + # # For Rails 3.1+ asset pipeline compatibility: + # # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_')) + # + # "/images/fallback/" + [version_name, "default.png"].compact.join('_') + # end + + # Process files as they are uploaded: + # process :scale => [200, 300] + # + # def scale(width, height) + # # do something + # end + + # Create different versions of your uploaded files: + version :thumb do + process :fix_exif_rotation + process :resize_to_fit => [400, 400] + end + + version :mobile do + process :fix_exif_rotation + process :resize_to_limit => [1152, 768] + end + + # Add a white list of extensions which are allowed to be uploaded. + # For images you might use something like this: + def extension_white_list + %w(jpg jpeg gif png bmp) + end + + # Override the filename of the uploaded files: + # Avoid using model.id or version_name here, see uploader/store.rb for details. + # def filename + # "something.jpg" if original_filename + # end + + + +end