Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
dad39b24
Commit
dad39b24
authored
Aug 28, 2018
by
Thurloat
Browse files
add the behaviour, work on actually making it work.
parent
8d2d7a88
Changes
3
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/upload.ex
View file @
dad39b24
defmodule
Pleroma
.
Upload
do
alias
Ecto
.
UUID
import
Logger
@storage_backend
Application
.
get_env
(
:pleroma
,
Pleroma
.
Upload
)
|>
Keyword
.
fetch!
(
:uploader
)
def
store
(%
Plug
.
Upload
{}
=
file
,
should_dedupe
)
do
content_type
=
get_content_type
(
file
.
path
)
uuid
=
get_uuid
(
file
,
should_dedupe
)
name
=
get_name
(
file
,
uuid
,
content_type
,
should_dedupe
)
...
...
@@ -26,23 +28,21 @@ def store(%Plug.Upload{} = file, should_dedupe) do
}
end
"""
# XXX: does this code actually work? i am skeptical. --kaniini
def
store
(%{
"img"
=>
"data:image/"
<>
image_data
},
should_dedupe
)
do
settings = Application.get_env(:pleroma, Pleroma.Upload)
use_s3 = Keyword.fetch!(settings, :use_s3)
parsed
=
Regex
.
named_captures
(
~r/(?<filetype>jpeg|png|gif);base64,(?<data>.*)/
,
image_data
)
data
=
Base
.
decode64!
(
parsed
[
"data"
],
ignore:
:whitespace
)
uuid = UUID.generate()
uuidpath = Path.join(upload_path(), uuid)
tmp_path
=
mkupload_for_image
(
data
)
uuid
=
UUID
.
generate
()
File.mkdir_p!(upload_path())
# create temp local storage, like plug upload provides for us.
File.write!(uuidpath, data
)
Logger
.
info
(
tmp_path
)
content_type = get_content_type(uuidpath)
content_type
=
get_content_type
(
tmp_path
)
strip_exif_data
(
content_type
,
tmp_path
)
name
=
create_name
(
...
...
@@ -51,30 +51,7 @@ def store(%{"img" => "data:image/" <> image_data}, should_dedupe) do
content_type
)
upload_folder = get_upload_path(uuid, should_dedupe)
url_path = get_url(name, uuid, should_dedupe)
File.mkdir_p!(upload_folder)
result_file = Path.join(upload_folder, name)
if should_dedupe do
if !File.exists?(result_file) do
File.rename(uuidpath, result_file)
else
File.rm!(uuidpath)
end
else
File.rename(uuidpath, result_file)
end
strip_exif_data(content_type, result_file)
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
,
tmp_path
,
content_type
,
should_dedupe
)
%{
"type"
=>
"Image"
,
...
...
@@ -88,7 +65,12 @@ def store(%{"img" => "data:image/" <> image_data}, should_dedupe) do
"name"
=>
name
}
end
"""
def
mkupload_for_image
(
data
)
do
{
:ok
,
tmp_path
}
=
Plug
.
Upload
.
random_file
(
"profile_pics"
)
:file
.
write_file
(
tmp_path
,
data
,
[
:write
,
:raw
,
:exclusive
,
:binary
])
tmp_path
end
def
strip_exif_data
(
content_type
,
file
)
do
settings
=
Application
.
get_env
(
:pleroma
,
Pleroma
.
Upload
)
...
...
lib/pleroma/uploaders/local.ex
View file @
dad39b24
...
...
@@ -3,7 +3,7 @@ defmodule Pleroma.Uploaders.Local do
alias
Pleroma
.
Web
def
put_file
(
name
,
uuid
,
file
,
_content_type
,
should_dedupe
)
do
def
put_file
(
name
,
uuid
,
tmp
file
,
_content_type
,
should_dedupe
)
do
upload_folder
=
get_upload_path
(
uuid
,
should_dedupe
)
url_path
=
get_url
(
name
,
uuid
,
should_dedupe
)
...
...
@@ -12,9 +12,9 @@ def put_file(name, uuid, file, _content_type, should_dedupe) do
result_file
=
Path
.
join
(
upload_folder
,
name
)
if
File
.
exists?
(
result_file
)
do
File
.
rm!
(
file
.
path
)
File
.
rm!
(
tmp
file
)
else
File
.
cp!
(
file
.
path
,
result_file
)
File
.
cp!
(
tmp
file
,
result_file
)
end
url_path
...
...
lib/pleroma/uploaders/uploader.ex
0 → 100644
View file @
dad39b24
defmodule
Pleroma
.
Uploaders
.
Uploader
do
@moduledoc
"""
Defines the contract to put an uploaded file to any backend.
"""
@doc
"""
Put a file to the backend.
Returns a `String.t` containing the path of the uploaded file.
"""
@callback
put_file
(
name
::
String
.
t
(),
uuid
::
String
.
t
(),
file
::
File
.
t
(),
content_type
::
String
.
t
(),
should_dedupe
::
Boolean
.
t
()
)
::
String
.
t
()
@callback
put_file
(
name
::
String
.
t
(),
uuid
::
String
.
t
(),
image_data
::
String
.
t
(),
content_type
::
String
.
t
(),
should_dedupe
::
String
.
t
()
)
::
String
.
t
()
end
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment