Nella mia applicazione Web creata utilizzando laravel 5.1, gli utenti possono caricare alcuni file sensibili che memorizzo in Amazon S3. Più tardi voglio gli utenti CON PERMESSO per scaricare questo file. Dal momento che voglio controllare questo auth, non posso scaricare il file usando i metodi tradizionali dando loro un collegamento diretto al file in S3.Streaming di oggetti Amazon S3 da un server Web utilizzando Laravel
Il mio approccio:
Quando l'utente richiede un download, il mio server di download il file in locale e poi lo streaming per l'utente. Problema: Richiede molto tempo perché i file sono troppo grandi a volte.
Fornire all'utente un URL preconfilato per il download direttamente da S3. L'URL è valido solo per 5 minuti. Problema: Se l'URL è condiviso, chiunque può scaricarlo entro 5 minuti.
According to this article, trasmettere i dati direttamente da S3 ai client. Questo sembra promettente, ma non so come implementarlo.
Secondo questo articolo, ho bisogno di:
- Registrati flusso involucro - che è il mio primo problema, perché io non so come ottenere il possesso di
S3Client
oggetto, perché usi laravel flysystem, e non so quali metodi chiamare per ottenere questo oggetto. Forse dovrei includere il pacchetto S3 separatamente nel mio compositore.json? - Disabilita bufferizzazione dell'uscita - Devo eseguire questa operazione in laravel o laravel ne ha già provveduto?
Sono sicuro che altri sviluppatori hanno già riscontrato un problema simile e vorrebbe ottenere alcuni suggerimenti per l'aiuto. Se qualcuno è già stato trasmesso in streaming direttamente da S3 al client utilizzando laravel Response::download($pathToFile, $name, $headers)
, mi piacerebbe sentire i tuoi metodi.
Quello che non scorre da S3-> utente, è flussi S3-> Laravel-> utente. Il tuo server è ancora in loop, quindi stai aumentando la larghezza di banda e manchi la maggior parte dei vantaggi offerti da S3. – ceejayoz
@ceejayoz Capisco, ma quale scelta ho. Non posso dare accesso diretto ai file in S3. Inoltre dovrò rendere i file pubblicamente visibili affinché altri possano scaricarli. – Rash
Potrebbe essere possibile associare qualcosa a [credenziali IAM provvisorie] (http://docs.aws.amazon.com/AmazonS3/latest/dev/AuthUsingTempFederationTokenPHP.html) che limita l'uso dell'URL firmato a un particolare IP. – ceejayoz