Normalize file extension for uploaded files
This commit is contained in:
parent
90cf75f4a7
commit
082920044a
3 changed files with 40 additions and 13 deletions
|
@ -110,20 +110,20 @@ defmodule Pleroma.Upload do
|
||||||
if should_dedupe do
|
if should_dedupe do
|
||||||
create_name(uuid, List.last(String.split(file.filename, ".")), type)
|
create_name(uuid, List.last(String.split(file.filename, ".")), type)
|
||||||
else
|
else
|
||||||
unless String.contains?(file.filename, ".") do
|
parts = String.split(file.filename, ".")
|
||||||
case type do
|
|
||||||
"image/png" -> file.filename <> ".png"
|
new_filename =
|
||||||
"image/jpeg" -> file.filename <> ".jpg"
|
if length(parts) > 1 do
|
||||||
"image/gif" -> file.filename <> ".gif"
|
Enum.drop(parts, -1) |> Enum.join(".")
|
||||||
"video/webm" -> file.filename <> ".webm"
|
|
||||||
"video/mp4" -> file.filename <> ".mp4"
|
|
||||||
"audio/mpeg" -> file.filename <> ".mp3"
|
|
||||||
"audio/ogg" -> file.filename <> ".ogg"
|
|
||||||
"audio/wav" -> file.filename <> ".wav"
|
|
||||||
_ -> file.filename
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
file.filename
|
Enum.join(parts)
|
||||||
|
end
|
||||||
|
|
||||||
|
case type do
|
||||||
|
"application/octet-stream" -> file.filename
|
||||||
|
"audio/mpeg" -> new_filename <> ".mp3"
|
||||||
|
"image/jpeg" -> new_filename <> ".jpg"
|
||||||
|
_ -> Enum.join([new_filename, String.split(type, "/") |> List.last()], ".")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
1
test/fixtures/test.txt
vendored
Normal file
1
test/fixtures/test.txt
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
this is a text file
|
|
@ -56,5 +56,31 @@ defmodule Pleroma.UploadTest do
|
||||||
data = Upload.store(file, false)
|
data = Upload.store(file, false)
|
||||||
assert data["name"] == "an [image.jpg"
|
assert data["name"] == "an [image.jpg"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "fixes incorrect file extension" do
|
||||||
|
File.cp!("test/fixtures/image.jpg", "test/fixtures/image_tmp.jpg")
|
||||||
|
|
||||||
|
file = %Plug.Upload{
|
||||||
|
content_type: "image/jpg",
|
||||||
|
path: Path.absname("test/fixtures/image_tmp.jpg"),
|
||||||
|
filename: "an [image.blah"
|
||||||
|
}
|
||||||
|
|
||||||
|
data = Upload.store(file, false)
|
||||||
|
assert data["name"] == "an [image.jpg"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "don't modify filename of an unknown type" do
|
||||||
|
File.cp("test/fixtures/test.txt", "test/fixtures/test_tmp.txt")
|
||||||
|
|
||||||
|
file = %Plug.Upload{
|
||||||
|
content_type: "text/plain",
|
||||||
|
path: Path.absname("test/fixtures/test_tmp.txt"),
|
||||||
|
filename: "test.txt"
|
||||||
|
}
|
||||||
|
|
||||||
|
data = Upload.store(file, false)
|
||||||
|
assert data["name"] == "test.txt"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue