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

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
mnkhod
So i have been using ash framework for a while and i love it. However currently the issue im having with ash framework is the error handl...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
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
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews