Antoine Mesnil

Developer, Designer & Solo entrepreneur

Upload media to Supabase from remote URL with nodejs

Cover Image for Upload media to Supabase from remote URL with nodejs

Introduction

Recently I had to upload images in bulk to Supabase but I was kind of rusty on my nodejs and lost some time so I thought I would share the simple result to spare time for others.


Supabase setup

The first step is to create your bucket on supabase, make it public or make sure to create policies to have the right access.

Image description

You can also get your service_role API key to bypass any RLS policies at this URL (do not share or display in public): https://app.supabase.com/project/{YOUR_PROJECT_ID}/settings/api


Script setup

To init your project we are going to need npm or yarn and run those two commands

npm init
npm install @supabase/supabase-js node-fetch@2

It will create a package.json and install the necessary dependencies. Now you can create your script.js file and run

node script.js

If you wish to use typescript you can also do

npx ts-node script.ts

Script

import fetch from 'node-fetch'
import { createClient } from '@supabase/supabase-js'

const script = async () => {
  const options = {
    schema: 'public',
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
  }

  const supabase = createClient(
    `https://${process.env.SUPABASE_PROJECT_ID}.supabase.co`,
    process.env.SUPABASE_API_KEY || '',
    options,
  )

  const url = 'https://www.grapheine.com/wp-content/uploads/2015/09/nouveau-logo-google-2015.jpg'
  const blob = await fetch(url).then((r) => r.blob())
  await supabase.storage.from('my-new-bucket').upload('my-name' + '.jpg', blob)
  const { publicURL } = supabase.storage.from('covers').getPublicUrl('my-name' + '.jpg')

  //To save it in your DB
  await supabase.from('myTable').update({ logo_url: publicURL }).eq('id', the_thing_id)
}
script()

That's it, now you can run the script and loop it for bulk upload.


😄 Thanks for reading! If you found this article useful, want more tips and follow my journey to create my own startup studio follow me on Twitter