add tunable for stream uploads, as needed for jortage to work.
This commit is contained in:
parent
ad2ffd7ef1
commit
63af6951fa
4 changed files with 24 additions and 6 deletions
|
@ -109,6 +109,7 @@ config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
|
||||||
|
|
||||||
config :pleroma, Pleroma.Uploaders.S3,
|
config :pleroma, Pleroma.Uploaders.S3,
|
||||||
bucket: nil,
|
bucket: nil,
|
||||||
|
streaming_enabled: true,
|
||||||
public_endpoint: "https://s3.amazonaws.com"
|
public_endpoint: "https://s3.amazonaws.com"
|
||||||
|
|
||||||
config :pleroma, Pleroma.Uploaders.MDII,
|
config :pleroma, Pleroma.Uploaders.MDII,
|
||||||
|
|
|
@ -110,6 +110,12 @@ config :pleroma, :config_description, [
|
||||||
description:
|
description:
|
||||||
"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc." <>
|
"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."
|
" 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."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -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.
|
* `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 "".
|
For example, when using CDN to S3 virtual host format, set "".
|
||||||
At this time, write CNAME to CDN in public_endpoint.
|
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
|
## Pleroma.Upload.Filter.Mogrify
|
||||||
|
|
||||||
|
|
|
@ -38,16 +38,26 @@ defmodule Pleroma.Uploaders.S3 do
|
||||||
def put_file(%Pleroma.Upload{} = upload) do
|
def put_file(%Pleroma.Upload{} = upload) do
|
||||||
config = Config.get([__MODULE__])
|
config = Config.get([__MODULE__])
|
||||||
bucket = Keyword.get(config, :bucket)
|
bucket = Keyword.get(config, :bucket)
|
||||||
|
streaming = Keyword.get(config, :streaming_enabled)
|
||||||
|
|
||||||
s3_name = strict_encode(upload.path)
|
s3_name = strict_encode(upload.path)
|
||||||
|
|
||||||
op =
|
op =
|
||||||
upload.tempfile
|
if streaming do
|
||||||
|> ExAws.S3.Upload.stream_file()
|
upload.tempfile
|
||||||
|> ExAws.S3.upload(bucket, s3_name, [
|
|> ExAws.S3.Upload.stream_file()
|
||||||
{:acl, :public_read},
|
|> ExAws.S3.upload(bucket, s3_name, [
|
||||||
{:content_type, upload.content_type}
|
{: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
|
case ExAws.request(op) do
|
||||||
{:ok, _} ->
|
{:ok, _} ->
|
||||||
|
|
Loading…
Reference in a new issue