enable thumbnailing on S3

- added url to optimized image model
- refactored s3_store & local_store
This commit is contained in:
Régis Hanol
2013-07-31 23:26:34 +02:00
parent 36b6b8d78e
commit ed9417fa3b
23 changed files with 522 additions and 478 deletions

View File

@ -2,8 +2,6 @@ require 'digest/sha1'
require 'image_sizer'
require 'tempfile'
require 'pathname'
require_dependency 's3_store'
require_dependency 'local_store'
class Upload < ActiveRecord::Base
belongs_to :user
@ -20,17 +18,12 @@ class Upload < ActiveRecord::Base
optimized_images.where(width: width, height: height).first
end
def thumbnail_url
thumbnail.url if has_thumbnail?
end
def has_thumbnail?
thumbnail.present?
end
def create_thumbnail!
return unless SiteSetting.create_thumbnails?
return if SiteSetting.enable_s3_uploads?
return if has_thumbnail?
thumbnail = OptimizedImage.create_for(self, width, height)
optimized_images << thumbnail if thumbnail
@ -38,7 +31,7 @@ class Upload < ActiveRecord::Base
def destroy
Upload.transaction do
Upload.remove_file url
Discourse.store.remove_file(url)
super
end
end
@ -58,7 +51,7 @@ class Upload < ActiveRecord::Base
file.rewind
end
# create a db record (so we can use the id)
upload = Upload.create!({
upload = Upload.create!(
user_id: user_id,
original_filename: file.original_filename,
filesize: filesize,
@ -66,9 +59,9 @@ class Upload < ActiveRecord::Base
url: "",
width: width,
height: height,
})
)
# store the file and update its url
upload.url = Upload.store_file(file, sha1, upload.id)
upload.url = Discourse.store.store_upload(file, upload)
# save the url
upload.save
end
@ -76,36 +69,11 @@ class Upload < ActiveRecord::Base
upload
end
def self.store_file(file, sha1, upload_id)
return S3Store.store_file(file, sha1, upload_id) if SiteSetting.enable_s3_uploads?
return LocalStore.store_file(file, sha1, upload_id)
end
def self.remove_file(url)
return S3Store.remove_file(url) if SiteSetting.enable_s3_uploads?
return LocalStore.remove_file(url)
end
def self.has_been_uploaded?(url)
is_relative?(url) || is_local?(url) || is_on_s3?(url)
end
def self.is_relative?(url)
url.start_with?(LocalStore.directory)
end
def self.is_local?(url)
!SiteSetting.enable_s3_uploads? && url.start_with?(LocalStore.base_url)
end
def self.is_on_s3?(url)
SiteSetting.enable_s3_uploads? && url.start_with?(S3Store.base_url)
end
def self.get_from_url(url)
# we store relative urls, so we need to remove any host/cdn
url = url.gsub(/^#{LocalStore.asset_host}/i, "") if LocalStore.asset_host.present?
Upload.where(url: url).first if has_been_uploaded?(url)
asset_host = Rails.configuration.action_controller.asset_host
url = url.gsub(/^#{asset_host}/i, "") if asset_host.present?
Upload.where(url: url).first if Discourse.store.has_been_uploaded?(url)
end
end