FEATURE: Multisite support for S3 image stores (#6689)

* FEATURE: Multisite support for S3 image stores

* Use File.join to concatenate all paths & fix linting on multisite/s3_store_spec.rb
This commit is contained in:
Rishabh
2018-11-29 09:41:48 +05:30
committed by Guo Xiang Tan
parent 5db50d6cdc
commit 05a4f3fb51
4 changed files with 55 additions and 12 deletions

View File

@ -28,6 +28,10 @@ module FileStore
not_implemented
end
def upload_path
File.join("uploads", RailsMultisite::ConnectionManagement.current_db)
end
def has_been_uploaded?(url)
not_implemented
end

View File

@ -32,10 +32,6 @@ module FileStore
"#{Discourse.asset_host}#{relative_base_url}"
end
def upload_path
"/uploads/#{RailsMultisite::ConnectionManagement.current_db}"
end
def relative_base_url
"#{Discourse.base_uri}#{upload_path}"
end
@ -46,7 +42,7 @@ module FileStore
def download_url(upload)
return unless upload
"#{relative_base_url}/#{upload.sha1}"
File.join(relative_base_url, upload.sha1)
end
def cdn_url(url)
@ -68,7 +64,7 @@ module FileStore
end
def get_path_for(type, upload_id, sha, extension)
"#{upload_path}/#{super(type, upload_id, sha, extension)}"
File.join("/", upload_path, super(type, upload_id, sha, extension))
end
def copy_file(file, path)
@ -90,7 +86,7 @@ module FileStore
end
def public_dir
"#{Rails.root}/public"
File.join(Rails.root, "public")
end
def tombstone_dir
@ -105,15 +101,13 @@ module FileStore
private
def list_missing(model)
public_directory = "#{Rails.root}/public"
count = 0
model.find_each do |upload|
# could be a remote image
next unless upload.url =~ /^\/[^\/]/
path = "#{public_directory}#{upload.url}"
path = "#{public_dir}#{upload.url}"
bad = true
begin
bad = false if File.size(path) != 0

View File

@ -41,9 +41,12 @@ module FileStore
# add a "content disposition" header for "attachments"
options[:content_disposition] = "attachment; filename=\"#{filename}\"" unless FileHelper.is_supported_image?(filename)
# if this fails, it will throw an exception
path.prepend(File.join(upload_path, "/")) if RailsMultisite::ConnectionManagement.current_db != "default"
path = @s3_helper.upload(file, path, options)
# return the upload url
"#{absolute_base_url}/#{path}"
File.join(absolute_base_url, path)
end
def remove_file(url, path)
@ -93,7 +96,7 @@ module FileStore
return url if SiteSetting.Upload.s3_cdn_url.blank?
schema = url[/^(https?:)?\/\//, 1]
folder = @s3_helper.s3_bucket_folder_path.nil? ? "" : "#{@s3_helper.s3_bucket_folder_path}/"
url.sub("#{schema}#{absolute_base_url}/#{folder}", "#{SiteSetting.Upload.s3_cdn_url}/")
url.sub(File.join("#{schema}#{absolute_base_url}", folder), File.join(SiteSetting.Upload.s3_cdn_url, "/"))
end
def cache_avatar(avatar, user_id)