aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRachel Fae Fox <allisonthefox@gmail.com>2019-09-23 20:38:53 +0000
committerrinpatch <rinpatch@sdf.org>2019-09-23 20:38:53 +0000
commit63af6951fa42429d0a02861d5ad1afdd053864cf (patch)
treeab6ce289d6cedbb273832c7e56d273990b537c38
parentad2ffd7ef1cbb8afff6ecee2cbda79414a12fbaa (diff)
downloadpleroma-63af6951fa42429d0a02861d5ad1afdd053864cf.tar.gz
add tunable for stream uploads, as needed for jortage to work.
-rw-r--r--config/config.exs1
-rw-r--r--config/description.exs6
-rw-r--r--docs/config.md1
-rw-r--r--lib/pleroma/uploaders/s3.ex22
4 files changed, 24 insertions, 6 deletions
diff --git a/config/config.exs b/config/config.exs
index 4c758d4a0..1988753d6 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -109,6 +109,7 @@ config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
config :pleroma, Pleroma.Uploaders.S3,
bucket: nil,
+ streaming_enabled: true,
public_endpoint: "https://s3.amazonaws.com"
config :pleroma, Pleroma.Uploaders.MDII,
diff --git a/config/description.exs b/config/description.exs
index 5dc8dc364..d95250017 100644
--- a/config/description.exs
+++ b/config/description.exs
@@ -110,6 +110,12 @@ config :pleroma, :config_description, [
description:
"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
" For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in public_endpoint."
+ },
+ %{
+ key: :streaming_enabled,
+ type: :boolean,
+ description:
+ "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems."
}
]
},
diff --git a/docs/config.md b/docs/config.md
index 1179def56..34e9c19ec 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -23,6 +23,7 @@ Note: `strip_exif` has been replaced by `Pleroma.Upload.Filter.Mogrify`.
* `truncated_namespace`: If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or "" etc.
For example, when using CDN to S3 virtual host format, set "".
At this time, write CNAME to CDN in public_endpoint.
+* `streaming_enabled`: Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems.
## Pleroma.Upload.Filter.Mogrify
diff --git a/lib/pleroma/uploaders/s3.ex b/lib/pleroma/uploaders/s3.ex
index 8c353bed3..9876b6398 100644
--- a/lib/pleroma/uploaders/s3.ex
+++ b/lib/pleroma/uploaders/s3.ex
@@ -38,16 +38,26 @@ defmodule Pleroma.Uploaders.S3 do
def put_file(%Pleroma.Upload{} = upload) do
config = Config.get([__MODULE__])
bucket = Keyword.get(config, :bucket)
+ streaming = Keyword.get(config, :streaming_enabled)
s3_name = strict_encode(upload.path)
op =
- upload.tempfile
- |> ExAws.S3.Upload.stream_file()
- |> ExAws.S3.upload(bucket, s3_name, [
- {:acl, :public_read},
- {:content_type, upload.content_type}
- ])
+ if streaming do
+ upload.tempfile
+ |> ExAws.S3.Upload.stream_file()
+ |> ExAws.S3.upload(bucket, s3_name, [
+ {:acl, :public_read},
+ {:content_type, upload.content_type}
+ ])
+ else
+ {:ok, file_data} = File.read(upload.tempfile)
+
+ ExAws.S3.put_object(bucket, s3_name, file_data, [
+ {:acl, :public_read},
+ {:content_type, upload.content_type}
+ ])
+ end
case ExAws.request(op) do
{:ok, _} ->