Path Assoluto A Cartella & Url Redirect

Salve,

Sto sviluppando un servizio REST con Yii e ho due dubbi/richieste che vorrei farvi nella speranza che possiate aiutarmi.

Prima di tutto sul mio server c’è una chiamata che prende dall’esterno una serie di file e li deve mettere in una cartella; i file hanno un nome che genero io e fino ad adesso li ho messi nella cartella ottendo il path con:

$folder = Yii::getPathOfAlias(‘webroot’)."/data/";

I file vengono acquisiti tramite curl e salvati nella cartella usando l’opzione relativa CURLOPT_FILE in modo da evitare un consumo eccessivo di RAM (non ha senso per me tenerli in memoria).

A questo punto il nome del file viene salvato in un record sul database e ritornato assieme ad altre informazioni quando richiesto dal client via REST.

Supponiamo ora che il client voglia ottenere il percorso per il download del file.

Ho pensato di fare una chiamata REST /file/nome_file che non faccia altro che creare un URL assoluto al file…con un redirect?

Avete idea?

Vorrei che /file/nomefile facesse partire direttamente il download del file

ho dovuto gestire centinaia di casistiche di questo tipo, anche se nel mio caso il file non veniva mai risalvato direttamente sul server della mia applicazione ma da design doveva restare sul server di backoffice, visto che l’utente poteva dover modificare il file quando voleva e gestire un meccanismo di push dal server di backoffice a quello di frontend ad ogni modifica era stata un opzione scartata in fase di analisi.

ad ogni modo se vuoi che la action di un controller datogli il nome del file restituisca il file stesso dovrai eseguire uno streaming del file con php, aprendolo e restituendone il binario nel frattempo che lo legge.

fopen può essere una delle possibili soluzioni per quello che vuoi ottenere.

un buon motivo per cui si può a priori decidere di usare questo approccio è che in questo modo puoi rinominare on the fly il file che restituisci all’utente finale, tenendo così il nome che vuoi per il file fisicamente sul disco e permettendo ad i tuoi utenti di modificare il nome del file per l’utente finale senza dover necessariamente rieseguire l’upload.

ricordati comunque di rinviare negli header della risposta della action il mime corretto del file se vuoi che il browser sia in grado di riconoscerlo e suggerire eventuali applicazioni per aprirlo.

grazie mille gentilissimo. provo e vi faccio sapere.