Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Přidat do uploadovacího nástroje upload přímo z klienta #1035

Closed
zoul opened this issue May 31, 2024 · 2 comments · Fixed by #1087
Closed

Přidat do uploadovacího nástroje upload přímo z klienta #1035

zoul opened this issue May 31, 2024 · 2 comments · Fixed by #1087
Assignees

Comments

@zoul
Copy link
Member

zoul commented May 31, 2024

V #714 jsme dodali nástroj pro upload souborů na Vercel. Uploadujeme přes klasický serverless API endpoint, což byla ta implementačně jednodušší varianta, která má ovšem zásadní omezení, zejména na velikost souboru, která nesmí překročit ~4,5 MB. Chtěli bychom to předělat na pre-signed upload z klienta, který tohle omezení nemá.

@zoul
Copy link
Member Author

zoul commented Aug 16, 2024

@drahoja9 Kdyby sis chtěl zaprogramovat :), tohle je IMO pěkný ticket? Budu teď týden pryč, ale po návratu bych to pak mohl omrknout a mergnout. Nevím, jestli je jasné, co je potřeba udělat, jestli znáš třeba pre-signed uploads v S3. Rychlá rekapitulace:

  • Na server (Vercel) nemůžeme z klienta uploadovat přímo, protože bychom někde v klientovi nutně leakovali klíče k API.
  • Proto uploadujeme přes náš endpoint, který převezme data od klienta a předá je na server. Z endpointu už ty API klíče neutečou.
  • Akorát je to blbý v tom, že ty data tečou dvakrát – jednou z klienta na endpoint, podruhé z endpointu na server. A kromě toho mají serverless funkce v AWS (a tedy i na Vercelu) hodně přísný limit na velikost těla požadavku, takže takhle nejdou nahrávat soubory větší než ~4,5 MB.
  • Proto se v téhle situaci používají pre-signed uploads. Klient řekne endpointu, že chce nahrát soubor na server. Endpoint si pomocí API klíčů domluví se serverem upload „předem“ a dostane od serveru URL, do kterého je zapečená jednorázová autentizace pro upload. Tohle URL vrátí endpoint klientovi, který pak může zavolat POST nebo PUT na dotyčné URL a hodit tak data rovnou na server – aniž by mohl pak URL použít znovu třeba pro jiný upload.

@drahoja9
Copy link
Contributor

Jo, to vypadá moc zajímavě. Zadání mi připadá jasné, zkusim to do tvého návratu nabouchat. 🙂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants