Lagring av bilder i en database anbefales generelt ikke. Å gjøre det kan fort bli dyrt på grunn av mengden lagring og prosessorkraft som kreves. Det er bedre å bruke en kostnadseffektiv og skalerbar lagringstjeneste som Supabase-lagring.
Nedenfor lærer du hvordan du laster opp bilder til en lagringsbøtte ved hjelp av Supabase JavaScript-klientbiblioteket og hvordan du serverer bildene i en Next.js-applikasjon.
Opprette et Supabase-prosjekt
Hvis du ikke allerede har en Next.js-applikasjon klar, følg den offisielle Startveiledning for Next.js for å lage din søknad.
Når du har gjort det, følg disse trinnene for å opprette en Supabase-database:
- Naviger til Supabase-nettstedet og opprett en ny konto. Logg inn hvis du allerede har en konto.
- Fra Supabase-dashbordet klikker du på Opprett et nytt prosjekt knapp.
- Gi prosjektet ditt et navn og klikk på Lag prosjekt knapp. Når Supabase oppretter prosjektet, vil det omdirigere deg til prosjektdashbordet
Etter å ha opprettet prosjektet, lag en lagringsbøtte.
Opprette en Supabase lagringsbøtte
En lagringsbøtte lar deg lagre mediefiler som bilder og videoer. I Supabase kan du opprette en lagringsbøtte på dashbordet eller bruke klientbiblioteket.
Følg disse trinnene for å bruke dashbordet:
- Gå til Supabase lagring side i dashbordet.
- Klikk Ny bøtte og skriv inn et navn for bøtta. Du kan navngi det bilder siden du vil lagre bilder i det.
- Klikk Lag bøtte.
Deretter vil du sette opp en Supabase-klient i appen din for å samhandle med bøtta.
Sette opp Supabase-klienten
Begynn med å installere supabase-js klientbibliotek via terminalen:
npm installer @supabase/supabase-js
Deretter oppretter du en ny mappe kalt lib ved roten av programmet eller i src-mappen hvis du bruker den. I denne mappen legger du til en ny fil med navnet supabase.js og bruk følgende kode for å initialisere Supabase-klienten.
import { createClient } fra'@supabase/supabase-js'
eksportkonst supabase = createClient('
' , '' )
Erstatt prosjektets URL og anon-nøkkelen med dine egne detaljer som du kan finne i Supabase prosjektinnstillinger. Du kan kopiere detaljene i .env-filen og referere til dem derfra.
SUPABASE_PROJECT_URL="your_project_url"
SUPABASE_PROJECT_ANON_KEY="ditt_prosjekt_anon_nøkkel"
Nå, i supabase.js, bør du ha:
eksportkonst supabase = createClient(
process.env. SUPABASE_PROJECT_URL,
process.env. SUPABASE_ANON_KEY
);
Når du har gjort det, lag et skjema som godtar bildene.
Opprette et skjema som godtar bilder
Innsiden mappen Next.js-appen av applikasjonen din, opprett en undermappe med navnet laste opp og legg til en ny fil med navnet side.js. Dette vil opprette en ny side tilgjengelig på ruten /upload. Hvis du bruker Next.js 12, lag upload.js i sider mappe.
På opplastingssiden legger du til følgende kode for å lage skjemaet.
"bruk klient";
import { useState } fra"reagere";eksportmisligholdefunksjonSide() {
konst [fil, settfil] = brukState([]);konst handleSubmit = asynkron (e) => {
e.preventDefault();
// Last opp bilde
};konst handleFileSelected = (e) => {
setfil (e.target.files[0]);
};
komme tilbake (
Når du velger en fil og klikker på send-knappen, skal skjemaet kalle handleSubmit-funksjonen. Det er i denne funksjonen du laster opp bildet.
For store skjemaer med flere felt kan det være enklere å bruk et skjemabibliotek som formik å håndtere validering og innsending.
Laste opp en bildefil til en Supabase-lagringsbøtte
I handleSubmit-funksjonen bruker du Supabase-klienten til å laste opp bildet ved å legge til koden nedenfor.
konst handleSubmit = asynkron (e) => {
e.preventDefault();
konst filnavn = `${uuidv4()}-${file.name}`;konst { data, feil } = avvente supabase.lagring
.fra("Bilder")
.upload (filnavn, fil, {
cacheControl: "3600",
opprør: falsk,
});
konst filbane = data.bane;
// lagre filbane i databasen
};
I denne funksjonen oppretter du et unikt filnavn ved å sette sammen filnavnet og en UUID generert av uuid npm-pakken. Dette anbefales for å unngå å overskrive filer som deler samme navn.
Du må installere uuid-pakken via npm, så kopier og kjør kommandoen nedenfor i terminalen.
npm installer uuid
Deretter, øverst på opplastingssiden, importerer du versjon 4 av uuid.
import { v4 som uuidv4 } fra"uuid";
Hvis du ikke vil bruke uuid-pakken, finnes det noen andre metoder du kan bruke for å generere unike IDer.
Deretter bruker du supabase-klienten til å laste opp filen til lagringsbøtten kalt "bilder". Husk å importere supabase-klienten øverst i filen.
import { supabase } fra"@/lib/supabase";
Merk at du passerer stien til bildet og selve bildet. Denne banen fungerer på samme måte som i filsystemet. For eksempel, hvis du lagrer bildet i en mappe i bøtten kalt offentlig, vil du spesifisere banen som "/public/filename".
Supabase vil returnere et objekt som inneholder data- og feilobjektet. Dataobjektet inneholder URL-en til bildet du nettopp lastet opp.
For at denne opplastingsfunksjonen skal fungere, må du opprette en tilgangspolicy som lar applikasjonen din sette inn og lese data i en Supabase-lagringsbøtte ved å følge disse trinnene:
- På prosjektdashbordet ditt klikker du på Oppbevaring fanen på venstre sidefelt.
- Velg din oppbevaringsbøtte og klikk på Adgang fanen.
- Under Bøttepolitikk, Klikk på Ny politikk knapp.
- Velg For full tilpasning mulighet for å lage en policy fra bunnen av.
- I Legg til policy dialogboks, skriv inn et navn for policyen din (f.eks. "Tillat innsetting og lesing").
- Plukke ut SETT INN og PLUKKE UT tillatelser fra Tillatte operasjoner nedtrekksmenyen.
- Klikk på Anmeldelse knappen for å se gjennom retningslinjene.
- Klikk på Lagre for å legge til policyen.
Du skal nå kunne laste opp bilder uten å få opp en tilgangsfeil.
Visning av de opplastede bildene i applikasjonen din
For å vise bildet på nettstedet ditt trenger du en offentlig URL, som du kan hente på to forskjellige måter.
Du kan bruke Supabase-klienten slik:
konst filbane = "path_to_file_in_buckey"
konst { data } = supabase
.Oppbevaring
.fra('Bilder')
.getPublicUrl(`${filepath}`)
Eller du kan manuelt koble sammen nettadressen for bøtte med filbanen:
konst filbane = `${bucket_url}/${filepath}`
Bruk hvilken metode du foretrekker. Når du har filbanen, kan du bruke den i Next.js-bildekomponenten slik:
"" width={200} høyde={200}/>
Denne koden vil vise bildet på nettstedet ditt.
Opprette robuste applikasjoner med Supabase
Ved å bruke denne koden kan du godta en fil fra en bruker gjennom et skjema og laste den opp til Supabase-lagring. Du kan deretter hente det bildet og vise det på nettstedet ditt.
I tillegg til å lagre bilder, har Supabase andre funksjoner. Du kan opprette en PostgreSQL-database, skrive kantfunksjoner og sette opp autentisering for brukerne dine.