aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/upload.ex
diff options
context:
space:
mode:
authorThurloat <thurloat@gmail.com>2018-08-27 22:20:54 -0300
committerThurloat <thurloat@gmail.com>2018-08-27 22:20:54 -0300
commit709816a0f891d6c26c43b54577a3b727c1fe4af6 (patch)
treed12d6a1dfbd88692775f11ef6a0223ac46c00366 /lib/pleroma/upload.ex
parent49b165ddc61091fc192e6f8a252c9a02a5fcef2d (diff)
downloadpleroma-709816a0f891d6c26c43b54577a3b727c1fe4af6.tar.gz
example of flexible storage backends
Diffstat (limited to 'lib/pleroma/upload.ex')
-rw-r--r--lib/pleroma/upload.ex66
1 files changed, 2 insertions, 64 deletions
diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex
index a744e6fd4..d7cc8122a 100644
--- a/lib/pleroma/upload.ex
+++ b/lib/pleroma/upload.ex
@@ -4,31 +4,15 @@ defmodule Pleroma.Upload do
def store(%Plug.Upload{} = file, should_dedupe) do
settings = Application.get_env(:pleroma, Pleroma.Upload)
- use_s3 = Keyword.fetch!(settings, :use_s3)
+ storage_backend = Keyword.fetch!(settings, :storage_backend)
content_type = get_content_type(file.path)
uuid = get_uuid(file, should_dedupe)
name = get_name(file, uuid, content_type, should_dedupe)
- upload_folder = get_upload_path(uuid, should_dedupe)
- url_path = get_url(name, uuid, should_dedupe)
strip_exif_data(content_type, file.path)
- File.mkdir_p!(upload_folder)
- result_file = Path.join(upload_folder, name)
-
- if File.exists?(result_file) do
- File.rm!(file.path)
- else
- File.cp!(file.path, result_file)
- end
-
- url_path =
- if use_s3 do
- put_s3_file(name, uuid, result_file, content_type)
- else
- url_path
- end
+ url_path = storage_backend.put_file(name, uuid, content_type)
%{
"type" => "Document",
@@ -115,11 +99,6 @@ defmodule Pleroma.Upload do
end
end
- def upload_path do
- settings = Application.get_env(:pleroma, Pleroma.Upload)
- Keyword.fetch!(settings, :uploads)
- end
-
defp create_name(uuid, ext, type) do
case type do
"application/octet-stream" ->
@@ -163,26 +142,6 @@ defmodule Pleroma.Upload do
end
end
- defp get_upload_path(uuid, should_dedupe) do
- if should_dedupe do
- upload_path()
- else
- Path.join(upload_path(), uuid)
- end
- end
-
- defp get_url(name, uuid, should_dedupe) do
- if should_dedupe do
- url_for(:cow_uri.urlencode(name))
- else
- url_for(Path.join(uuid, :cow_uri.urlencode(name)))
- end
- end
-
- defp url_for(file) do
- "#{Web.base_url()}/media/#{file}"
- end
-
def get_content_type(file) do
match =
File.open(file, [:read], fn f ->
@@ -224,25 +183,4 @@ defmodule Pleroma.Upload do
_e -> "application/octet-stream"
end
end
-
- defp put_s3_file(name, uuid, path, content_type) do
- settings = Application.get_env(:pleroma, Pleroma.Upload)
- bucket = Keyword.fetch!(settings, :bucket)
- public_endpoint = Keyword.fetch!(settings, :public_endpoint)
-
- {:ok, file_data} = File.read(path)
-
- File.rm!(path)
-
- s3_name = "#{uuid}/#{name}"
-
- {:ok, result} =
- ExAws.S3.put_object(bucket, s3_name, file_data, [
- {:acl, :public_read},
- {:content_type, content_type}
- ])
- |> ExAws.request()
-
- "#{public_endpoint}/#{bucket}/#{s3_name}"
- end
end