yassine

yassine

I want to upload a file to google cloud storage with my phoenix application, i found some github project but i didn’t understand them very well, can any one help me to how doing that please !

Showing Posts 1 to 10

jhefreyzz

jhefreyzz

I once attempted to use GCS for file uploading using elixir google api but I change a cloud provider since I needed a ecto integration and waffle and s3 integrates well.

As for your question please kindly read the README of elixir google api.

  1. Add google_api_storage and goth to your dependencies
  2. Get your google client id and secret
  3. export the client id and secret as shown below:
export GOOGLE_CLIENT_ID=[YOUR-OAUTH-CLIENT-ID]
export GOOGLE_CLIENT_SECRET=[YOUR-OAUTH-CLIENT-SECRET]
  1. Perform requests
# Obtain an access token using goth
{:ok, token} = Goth.Token.for_scope("https://www.googleapis.com/auth/cloud-platform")
conn = GoogleApi.Storage.V1.Connection.new(token.token)

# Call the Storage V1 API (for example) to list buckets
{:ok, response} = GoogleApi.Storage.V1.Api.Buckets.storage_buckets_list(conn, project_id)

# Print the response
Enum.each(response.items, &IO.puts(&1.id))

You can also checkout the example repo: https://github.com/GoogleCloudPlatform/elixir-samples/tree/master/storage

mruoss

mruoss

Is the file generated by the server or by the user? If the file is uploaded by the user, I would not bother uploading the file to your server and then forwarding it to the GCS bucket. Instead, I would generate a signed URL on the server, send that to the browser and let the browser upload the file directly to the bucket.

I describe two variants for creating such a signed URL on gcs_signed_url. The two variants differ in whether your application is running on the Google cloud itself or not.

yassine

yassine OP

yes that’s exactly my problem i couldn’t know how to “Get your google client id and secret” and also where i suppose write : “export GOOGLE_CLIENT_ID=[YOUR-OAUTH-CLIENT-ID]
export GOOGLE_CLIENT_SECRET=[YOUR-OAUTH-CLIENT-SECRET]”

jhefreyzz

jhefreyzz

Please kindly search on your own how to generate google client id and secrets, for starters

  • you head over to API and services
  • click on Credentials
  • click on Create credentials and select OAuth client ID

As for these two

export GOOGLE_CLIENT_ID=[YOUR-OAUTH-CLIENT-ID]
export GOOGLE_CLIENT_SECRET=[YOUR-OAUTH-CLIENT-SECRET]

after you secure you client id and secret, open a new terminal on the current project directory and type those above.

yassine

yassine OP

i did all this stuff and i got this:

jhefreyzz

jhefreyzz

To be honest, I didn’t use OAuth2 for authentication instead I use Google service account. Do you really need to use OAuth2?

yassine

yassine OP

for me any thing work will be fine, can you please tell me how you did that without OAuth.
Because i have a service account but i didn’t know how to use it and because i am begginer on that i suppose that i make some things wrong

jhefreyzz

jhefreyzz

Sure, do you have the service account json file already, if not please secure it first.

Then in your terminal just type:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/service_account.json

Then try make a request again and see if it works.

yassine

yassine OP

i did that at first i didn’t use export cmd because i am in windows:

after that i run my app and i got the same error:

jhefreyzz

jhefreyzz

I’m really not sure anymore I never encounter such error when I implement a file upload function to GCS. Have you inspect if there’s a token return from Goth.Token.for_scope. Could you also try using Goth.fetch/1 instead of for_scope.

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
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
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
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