Credimi, ho passato giorni a capire questa cosa, e anche a me sembrava strano, ma impostare content-disposition: attachment; filename=X per tutti i file multimediali tranne le immagini imita perfettamente come i file multimediali vengono attualmente serviti dallo storage locale.
In breve, NO! Posso trasmetterli in streaming usando l’oneboxing se necessario, ma il link per il download diretto [media_file](percorso_file_media)—dove il percorso è locale o S3—dovrebbe scaricare il file usando il suo nome originale, esattamente come avviene sullo storage locale (e per i file migrati su S3).
Ma improvvisamente questo non è più possibile per i caricamenti diretti su S3: il link [media_file](percorso_S3_file_media) trasmette in streaming il file multimediale in una nuova scheda (non necessario, poiché è ciò che fa l’oneboxing), e quando si tenta di scaricarlo dai controlli del lettore multimediale, perde anche il nome originale.
Mi aspetto che i file ospitati localmente e su S3 si comportino allo stesso modo, d’accordo? Con la tua proposta, la funzionalità sarebbe completamente invertita per i caricamenti ospitati su S3, non solo per quelli nuovi ma anche per quelli migrati.
Ecco un caso dettagliato e il motivo per cui credo che la mia proposta sia corretta (cioè, mantiene la stessa funzionalità per i caricamenti ospitati sia localmente che su S3):
File ospitati localmente
Ho un repository grande (5k+) di file audio (parlato) che vanno da 1 a 10 MB, con un totale di circa 40 GB, che sono attualmente ospitati sullo storage locale e ora vengono trasferiti su S3 (questo è per design, non voglio che siano ospitati su un servizio di terze parti). Questo funziona già abbastanza bene dal punto di vista delle prestazioni, ma ora ha senso migrare su S3 a causa dell’aumento dei costi di archiviazione e dell’opzione di utilizzare un CDN con S3.
Questi file sono ottimizzati per le dimensioni e non sono destinati allo streaming, ma piuttosto al download e all’ascolto locale (per client con larghezza di banda/connettività limitata). I file vengono caricati in blocco e poi riferiti nel post grezzo utilizzando link generati dai rispettivi valori SHA1 usando: [dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3) e possono essere scaricati con il loro nome originale cliccando sul link diretto al file (vedi esempio qui).
Se, d’altra parte, questi link fossero oneboxed, potrebbero ancora essere trasmessi in streaming direttamente dal server Discourse (e anche scaricati dai controlli del lettore, ancora una volta con il nome originale).
File migrati su S3
Quando i caricamenti vengono migrati dallo storage locale a S3 usando uploads:migrate_to_s3, accadono due cose:
content-disposition: attachment; filename=X viene impostato per tutti i caricamenti tranne le immagini
- i link locali diretti
[dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3) nei post grezzi vengono sostituiti con link S3 [dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3)
Questo imita i caricamenti ospitati localmente in ogni modo (link di download con nomi originali, nonché oneboxing).
File caricati di recente su S3
content-disposition: attachment; filename=X non viene impostato per tutti i file multimediali
- i file caricati di recente sono riferiti usando un URL breve nel grezzo, ma i link cotti puntano ancora direttamente a
https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3
- cliccando sul link URL breve o sul link S3 inserito manualmente
[dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3) il file si apre in una nuova scheda invece di essere scaricato.
Poiché content-disposition non è impostato, ora questo differisce da come i file multimediali sono serviti dallo storage locale (l’oneboxing funziona ancora, ma i link di download con i nomi originali non sono più disponibili).
Se hai bisogno di ulteriori informazioni, fammelo sapere.