Ga naar inhoud

Bestanden & Media

Sla bestanden en media op vanuit je app. Elk bestand krijgt een permanente publieke URL.

Media in Proyecta bestaat uit twee lagen. De meeste apps gebruiken de ingebouwde CMS-mediacapaciteit — afbeelding- en bestandsuploads die de AI voor je in je beheerpaneel en formulieren integreert. Daaronder biedt een lager niveau Files API directe controle wanneer je dat nodig hebt. Beide slaan op in CDN-ondersteunde objectopslag en geven een permanente publieke URL terug.

De chatinvoer accepteert afbeeldingen direct — plak een schermafbeelding of sleep een afbeeldingsbestand naar de invoer. Ondersteunde formaten: PNG, JPEG, WebP, GIF, AVIF. Maximale grootte: 10 MB per afbeelding.

Chat-bijlagen maken deel uit van het bericht, niet van je bestandsbibliotheek. Gebruik voor permanente opslag de ingebouwde media-uploads of de Files API.

Ingebouwde media-uploads (de CMS-mediacapaciteit)

Section titled “Ingebouwde media-uploads (de CMS-mediacapaciteit)”

De meeste apps raken de Files API niet direct aan — media is een ingebouwde CMS-capaciteit. De app-template wordt geleverd met twee upload-hooks in @/hooks/useContent, en de AI integreert deze in je UI. Je beschrijft wat je wilt (“een afbeeldingsveld bij mijn producten”, “een bestandsupload in mijn contactformulier”) en Proyecta gebruikt de juiste:

Hook Waar het wordt gebruikt Endpoint Maximale grootte
useAssetUpload() Beheermediabibliotheek — ondersteunt de asset-kiezer in de inhoudseditor van het beheerpaneel POST /v1/public/files 10 MB
useFormFileUpload() Openbare formulierbestanden — bezoekersupload op een <FormBlock/>-bestandsveld (bonnen, foto’s) POST /v1/public/uploads 5 MB

Beide hooks retourneren een permanente publieke url die je opslaat bij de inhoudsvermelding (beheer) of formulierinzending (openbaar). Een paar dingen om te weten:

  • Beide limieten worden in code afgedwongen, niet per abonnement — 10 MB voor beheermedia, 5 MB voor openbare formulierbestanden.
  • Geaccepteerde typen zijn afbeeldingen (behalve SVG) en alleen PDF. SVG wordt om veiligheidsredenen geweigerd; grote afbeeldingen worden automatisch verkleind vóór de upload.
  • Je roept deze niet zelf aan — de AI koppelt ze. Gebruik de Files API hieronder alleen voor bestandsverwerking op een lager niveau of op maat.

Elke gepubliceerde Proyecta-app kan bestanden opslaan en serveren. Vanuit de pagina’s van je app is dat één aanroep — de meerstaps-signed-upload wordt voor je afgehandeld:

import * as platform from '@/lib/platformClient.ts';
// Upload straight from a file input — one call, no signed-URL juggling
async function onPick(file: File) {
const asset = await platform.assetDirectUpload({
blob: file,
filename: file.name,
mimeType: file.type,
});
console.log(asset.url); // permanent public URL
}
// List what's stored
const { assets, hasMore } = await platform.assetList({ limit: 20 });
// Remove one
await platform.assetDelete(asset.id);

Privébestanden. Geef visibility: 'private' mee om een bestand buiten de publieke bucket op te slaan, zonder permanente URL. Je leest het terug via een kortlevende link:

const { url, expiresAt } = await platform.assetSignedUrl(asset.id, { variant: 'thumbnail' });

Gebruik privé + signed URL’s voor alles wat niet te raden mag zijn — uploads van klanten, identiteitsdocumenten, betaalde downloads.

Hoe worden bestanden naar mijn app geüpload?

Section titled “Hoe worden bestanden naar mijn app geüpload?”

Bestandsuploads worden afgehandeld via de AI builder. Vraag de AI om de uploadflow voor je te bouwen:

  • "Laat gebruikers een profielfoto uploaden en sla deze op in Proyecta Files"
  • "Voeg een afbeeldingsgalerij toe waar ingelogde gebruikers hun foto's kunnen uploaden en bekijken"
  • "Laat me PDF-facturen aan bestellingen koppelen"

De AI koppelt de upload in je app-code en verwijst naar de teruggegeven publieke URL.

Zijn de bestands-URL’s openbaar?

Ja. Elk bestand dat door de Files API wordt geretourneerd, heeft een permanente publieke URL. Upload niets wat je niet openbaar wilt maken.

Hoe groot mag een bestand zijn?

Bestandsgroottes worden in code beperkt, niet per abonnement: 10 MB voor uploads naar de beheermediabibliotheek (useAssetUpload), 5 MB voor openbare formulierbestandsuploads (useFormFileUpload), en 10 MB voor chat-bijlagen. Ingebouwde media-uploads accepteren alleen afbeeldingen (behalve SVG) en PDF.

Kan ik afbeeldingen vergroten, verkleinen of bijsnijden via de URL?

On-the-fly afbeeldingstransformaties (formaat wijzigen, bijsnijden, formaatconversie) staan op de roadmap.

  • Afbeeldingstransformaties via URL-parameters (formaat wijzigen, bijsnijden, formaatconversie)
  • Maporganisatie — maak mappaden aan en beheer deze voor opgeslagen bestanden