Bestanden en foto's in je app

Zodra gebruikers iets kunnen uploaden, verandert je app. Er komt opslag bij die groeit, verkeer dat geld kost en een reeks randgevallen: bestanden die te groot zijn, formaten die je niet verwacht en foto's die per ongeluk voor iedereen zichtbaar worden.

Terug naar OneDayBuild
01/06

Waar bestanden thuishoren

Niet in je database en niet naast je applicatiecode.

Bestanden in je database opslaan werkt bij tien testbestanden en wordt daarna een probleem: back-ups worden traag en groot, en je database is niet gemaakt om grote hoeveelheden binaire gegevens uit te serveren.

De gebruikelijke oplossing is objectopslag: een dienst waar je bestanden neerzet en waar je met een korte, tijdelijke link toegang toe geeft. In je database bewaar je alleen de verwijzing en de gegevens eromheen, zoals wie het bestand heeft geüpload en waar het bij hoort.

De tweede regel is dat de gebruiker rechtstreeks naar die opslag uploadt, niet via je eigen server. Je app geeft alleen een tijdelijke toestemming af. Dat scheelt belasting, het werkt met grote bestanden en het voorkomt dat je applicatie omvalt wanneer drie mensen tegelijk iets zwaars insturen.

02/06

Waar het geld weglekt

Opslag is meestal goedkoop. De rest niet altijd.

Verkeer bij downloaden

Wat je opslaat kost weinig; wat er uit gehaald wordt kan meer kosten dan de opslag zelf. Een populaire video of een fotogalerij die door zoekmachines wordt bezocht, is de post die mensen verrast.

Originelen die niemand bekijkt

Een telefoonfoto is al snel enkele megabytes en wordt getoond als miniatuur. Bewaar je alleen het origineel, dan verstuur je bij elke weergave het volle formaat.

Niets weggooien

Concepten, mislukte uploads en verwijderde items blijven staan als je ze niet actief opruimt. Opslag die alleen groeit, is een rekening die alleen groeit.

03/06

Wat je in het ontwerp meteen goed zet

Vijf dingen die later lastig te repareren zijn.

  • Zet niets openbaar wat privé is. Standaard afgeschermd, toegang via een link die na korte tijd verloopt. Een openbare map met klantbestanden is een datalek dat er per ongeluk uitziet als een instelling.
  • Controleer wat er binnenkomt. Maximale grootte, toegestane formaten en controle op wat het bestand werkelijk is in plaats van waar de bestandsnaam op eindigt. Een geüpload bestand is invoer van een vreemde.
  • Maak varianten bij het uploaden. Een miniatuur en een weergaveversie naast het origineel. Dat is één keer werk en het scheelt bij elke weergave verkeer en wachttijd.
  • Strip locatiegegevens uit foto's. Telefoonfoto's bevatten vaak de coördinaten waar ze zijn gemaakt. Als die foto's zichtbaar zijn voor anderen, deel je meer dan de gebruiker denkt.
  • Bedenk vooraf wat verwijderen betekent. Verdwijnt het bestand echt, of alleen de verwijzing ernaar? Bij persoonsgegevens is dat onderscheid het verschil tussen voldoen aan een verzoek en denken dat je eraan voldoet.
04/06

Wat past in een eerste versie

Uploads zijn zelden waar je idee op wordt beoordeeld.

Wel meteen
  • Objectopslag met afgeschermde toegang en tijdelijke links.
  • Rechtstreeks uploaden vanaf de browser naar die opslag.
  • Een limiet op grootte en een korte lijst toegestane formaten.
  • Automatisch een miniatuur maken bij afbeeldingen.
Kan wachten
  • Slepen en neerzetten met voortgangsbalk en hervatten na uitval.
  • Bestanden bewerken of bijsnijden in de app zelf.
  • Versiebeheer op geüploade documenten.
  • Doorzoekbaar maken van de inhoud van documenten.
05/06

In een bouwdag

Uploaden werkend krijgen is een uur; de randgevallen zijn dat niet.

Een werkende upload met afgeschermde opslag, een limiet en een miniatuur krijgen we op een dag ruim voor elkaar. Dat is genoeg om te laten zien dat je gebruikers hun foto's, documenten of bonnen kwijt kunnen en dat het geheel klopt.

Wat we bewust laten liggen zijn de randgevallen: uploads die halverwege afbreken, bestanden van honderden megabytes, meerdere bestanden tegelijk met een voortgangsbalk. Die zijn goed te bouwen en ze zeggen niets over de vraag of je idee werkt.

Wat we wél altijd goed zetten is de afscherming. Bestanden die openbaar staan terwijl ze dat niet horen te zijn, is de fout die we het vaakst tegenkomen bij prototypes die door anderen zijn gemaakt, en de fout met de vervelendste gevolgen.

06/06

Veelgestelde vragen

Kan ik bestanden gewoon in mijn database opslaan?

Technisch kan het en het is zelden verstandig. Je back-ups worden groot en traag en je database gaat werk doen waar hij niet voor is gemaakt. Zet bestanden in objectopslag en bewaar in de database alleen de verwijzing plus de gegevens eromheen.

Wat kost opslag eigenlijk?

De opslag zelf is bij de meeste aanbieders bescheiden. Wat harder kan oplopen is het verkeer bij het downloaden, zeker bij afbeeldingen en video. Reken daarom niet met het aantal gigabytes dat je opslaat maar met hoe vaak die bestanden bekeken worden.

Hoe zorg ik dat alleen de juiste mensen erbij kunnen?

Zet de opslag afgeschermd en laat je app per aanvraag een tijdelijke link uitgeven, nadat hij heeft gecontroleerd of deze gebruiker dit bestand mag zien. Een link die niet verloopt en bij iedereen werkt, is precies zo openbaar als hij klinkt.

Moet ik afbeeldingen verkleinen?

Ja, en het liefst bij het uploaden. Telefoonfoto's zijn groot en worden meestal klein getoond. Een miniatuur en een weergaveversie naast het origineel schelen wachttijd voor je gebruikers en verkeer op je rekening.

Wat is het risico van geüploade bestanden?

Een geüpload bestand is invoer van iemand anders. Controleer de grootte, sta alleen de formaten toe die je nodig hebt en kijk naar wat het bestand werkelijk is in plaats van naar de extensie. Serveer geüploade bestanden bovendien niet vanaf hetzelfde domein als je app.

Hoe zit het met de AVG bij foto's van mensen?

Foto's waarop mensen herkenbaar zijn, zijn persoonsgegevens. Dan gelden dezelfde regels als voor de rest: een grondslag, een bewaartermijn en de mogelijkheid om ze echt te verwijderen. Denk daarnaast aan de locatiegegevens die vaak in telefoonfoto's zitten.

Moeten je gebruikers iets kunnen uploaden?

Vertel in de intake wat er geüpload wordt en door wie. Dan zetten we op de bouwdag een afgeschermde opslag neer die je meteen kunt uitproberen.