From 9fc20ed5720bccb77289ce3d6eb9bc3a69ceeb8a Mon Sep 17 00:00:00 2001 From: Thurloat Date: Tue, 28 Aug 2018 20:04:26 -0300 Subject: [PATCH] works now, tested with profile photo upload on local backend. --- lib/pleroma/upload.ex | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/lib/pleroma/upload.ex b/lib/pleroma/upload.ex index 16149d4dd..b70758dc7 100644 --- a/lib/pleroma/upload.ex +++ b/lib/pleroma/upload.ex @@ -1,6 +1,5 @@ defmodule Pleroma.Upload do alias Ecto.UUID - import Logger @storage_backend Application.get_env(:pleroma, Pleroma.Upload) |> Keyword.fetch!(:uploader) @@ -28,19 +27,15 @@ 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 parsed = Regex.named_captures(~r/(?jpeg|png|gif);base64,(?.*)/, image_data) data = Base.decode64!(parsed["data"], ignore: :whitespace) - tmp_path = mkupload_for_image(data) + # create temp local storage, like plug upload provides. + tmp_path = tempfile_for_image(data) uuid = UUID.generate() - # create temp local storage, like plug upload provides for us. - - Logger.info(tmp_path) - content_type = get_content_type(tmp_path) strip_exif_data(content_type, tmp_path) @@ -66,9 +61,11 @@ def store(%{"img" => "data:image/" <> image_data}, should_dedupe) do } end - def mkupload_for_image(data) do + def tempfile_for_image(data) do {:ok, tmp_path} = Plug.Upload.random_file("profile_pics") - :file.write_file(tmp_path, data, [:write, :raw, :exclusive, :binary]) + {:ok, tmp_file} = File.open(tmp_path, [:write, :raw, :binary]) + IO.binwrite(tmp_file, data) + tmp_path end