Add missing file extension if file does not have one

This commit is contained in:
Francis Dinh 2018-06-14 12:12:38 -04:00
parent 678df59d22
commit 0a95b5594b
2 changed files with 37 additions and 5 deletions

View file

@ -86,9 +86,14 @@ def upload_path do
end end
defp create_name(uuid, ext, type) do defp create_name(uuid, ext, type) do
if type == "application/octet-stream" do case type do
"application/octet-stream" ->
String.downcase(Enum.join([uuid, ext], ".")) String.downcase(Enum.join([uuid, ext], "."))
else
"audio/mpeg" ->
String.downcase(Enum.join([uuid, "mp3"], "."))
_ ->
String.downcase(Enum.join([uuid, List.last(String.split(type, "/"))], ".")) String.downcase(Enum.join([uuid, List.last(String.split(type, "/"))], "."))
end end
end end
@ -104,10 +109,24 @@ defp get_uuid(file, should_dedupe) do
defp get_name(file, uuid, type, should_dedupe) do defp get_name(file, uuid, type, should_dedupe) 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
unless String.contains?(file.filename, ".") do
case type do
"image/png" -> file.filename <> ".png"
"image/jpeg" -> file.filename <> ".jpg"
"image/gif" -> file.filename <> ".gif"
"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 file.filename
end end
end end
end
defp get_upload_path(uuid, should_dedupe) do defp get_upload_path(uuid, should_dedupe) do
if should_dedupe do if should_dedupe do

View file

@ -43,5 +43,18 @@ test "fixes incorrect content type" do
data = Upload.store(file, true) data = Upload.store(file, true)
assert hd(data["url"])["mediaType"] == "image/jpeg" assert hd(data["url"])["mediaType"] == "image/jpeg"
end end
test "adds missing 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"
}
data = Upload.store(file, false)
assert data["name"] == "an [image.jpg"
end
end end
end end