benonymus

benonymus

Hey I am trying to save a profile picture from my react native app with phoenix api.
So I started to use arc, following this guide: https://medium.com/@rafamossakowski/arc-carrierwave-for-phoenix-1064b2463fdf since I couldn’t find one that is using react native. It is working nicely with the website part, but my questions would be that:
How to send the picture form my app to the api in json?
And how to return the picture to the app from the api in json?

Thanks

Showing Posts 1 to 10

kokolegorille

kokolegorille

I usually base64 encode the image. The result is just a string. There is a little overhead due to encoding.

On the server side, I use something like this to convert the base64 string to file.

  # decode base64 string to binary
  defp sanitize_params(%{"base64" => base64} = params) do
    params
    |> Map.put("document_source", Base.decode64!(base64))
    |> Map.delete("base64")
  end

The sidenote is I needed to update endpoint like this, to increase the allowed size. This was needed when sending hires pictures from Iphone to backend.

  plug(
    Plug.Parsers,
    parsers: [:urlencoded, :multipart, :json],
    pass: ["*/*"],
    json_decoder: Poison,
    #
    # Increase the size for file uploads
    # https://chodounsky.net/2015/06/05/increase-request-length-in-phoenix-to-upload-large-files/
    # https://hexdocs.pm/plug/Plug.Parsers.html
    #
    length: 100_000_000
  )

PS. This is old code… still using Poison instead of Jason…

On the frontend (React Native) I just prepare data like this before sending to backend.

    const body = {
      document_type: documentType,
      base64: documentSource.base64,
    }
benonymus

benonymus OP

Hey Thanks for the response,
so you send the image as a string to the backend, maybe a dumb question but would it not be possible to just save that string to the database, or is that bad practice? - because then you could just send the string back and decode it and display the image or that is just really bad?

And so you have the file saved, but how do you send it back to the app?

kokolegorille

kokolegorille

I send it as string to the frontend, and decode the string on the client…

Of course You can save it as string, I just prefer to keep them as file. It is just more practical if You want to persist them on disk, or aws rather than in the db.

benonymus

benonymus OP

so you save it as a file and then save the path to it in the database?

and then when you need it get it from the databse and turn it bac into a string and send that?
Are you using arc too?

benonymus

benonymus OP

hey and would that be possible to send the picture from the app to elixir like if it would be from the web? just attach the picture somehow?

kokolegorille

kokolegorille

I think yes… Never tried.

The main problem I had at that time was the Plug.upload is not enabled by default for JSON api.

And from client You can use FormData, depending on what You use.

benonymus

benonymus OP

i read the documentation on plug.upload, but how do i send the picture in json? or if i am using form data, how do i send all of my data? because it doesnt seem to match the struct that it is looking for

kokolegorille

kokolegorille

IIRC You just need to add data, as in…

benonymus

benonymus OP

yes but my avatar is inside the user:

"id" => "2",
    "user" => %{
      "avatar" => %Plug.Upload{
        content_type: "image/jpeg",
        filename: "ConceptArt_SneakySneaky_011 (2).jpg",
        path: "/tmp/plug-1536/multipart-1536590148-521595600991125-4"
      }

how do i append that?

kokolegorille

kokolegorille

It seems You do receive the data correctly.

What do You want to do with it? Save it to db or on the cloud?

Where Next? Top

Trending in Questions Top

Blokh
Hey guys, I’ve got a huge CSV ( around 10 GB ) that needs to be processed hourly Do you guys have any suggestions what is the best prac...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
Onor.io
I have what I’ve heard referred to as a “lookup table” in my database. This is a way of assigning codes to common values. One common lo...
New
Trolleger
What approach to take when sending live updates to “random” users Hi! I have a question, I have a little chat app, and when I create a DM...
New
matt-savvy
Anyone here using Honeybadger? My Honeybadger account is being overwhelmed with noise from some bots. Seeing a lot of Bandit.HTTPError...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mcass19
ExRatatui lets you cook up rich terminal UIs in Elixir, powered by Rust’s ratatui via Rustler NIFs. Build interactive terminal applicatio...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New
wintermeyer
There are three potential reasons for members of this forum to have a look at https://vutuv.de You are tired or annoyed of LinkedIn. Yo...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews