Il problema è che il CDN sta ottenendo un comportamento rotto, che è esattamente ciò che non si desidera. Solo il non-CDN funziona correttamente, nel senso che quando si clicca su “download”, qualcosa viene scaricato.
Ah sì, allora dovremmo risolvere.
Va bene. Ci sono esempi per personalizzare la lightbox che posso usare come punto di partenza?
Non è affatto facilmente aggirabile, come si evince da:
Dovresti esaminare Magnific Popup: Responsive jQuery Lightbox Plugin per verificare se sia in qualche modo riconfigurabile in tempo reale.
Peccato, vedrò se riesco a trovare una soluzione.
Solo per curiosità: perché Discourse opta per un’azione ‘download’ invece di ‘visualizza a dimensione intera’ qui? Dal punto di vista dell’utente, sembrerebbe che la visualizzazione a dimensione intera sia un’azione più comune?
Pensavo fosse un problema MIME, ma guardando l’intestazione, potrebbe essere:
x-download-options: noopen
Che impedisce l’apertura di un file al momento del download. Spero che Sam possa chiarire.
è una decisione di @codinghorror, immagino sia un modo per conservare in modo pulito il nome originale del file caricato, cosa che a molte persone sta a cuore. Inoltre, sembra che sia proprio ciò che fanno siti come Flickr.
Non credo che intaccheremo nulla di tutto ciò; l’app si limiterà a fare da proxy per questo tramite una rotta dedicata o qualcosa di simile. Il numero di persone che cliccano su “download” è minimo, quindi un eventuale bypass della CDN potrebbe essere accettabile in questo caso. In ogni caso, @pmusaraj deciderà qual è la soluzione migliore. Per quanto ne so, dobbiamo o chiedere ad AWS di fornirci un URL firmato con una disposition dei contenuti speciale, oppure fare da proxy al file. In entrambi i casi si verificherà un bypass della CDN di S3. Se facciamo da proxy tramite l’app, almeno potremo utilizzare la CDN dell’app.
Dopo un’ulteriore lettura, sembra che content-disposition: attachment; e x-download-options: noopen siano responsabili di questo comportamento.
Apprezzo che questo spieghi il come, non il perché. Tuttavia, se è per motivi di sicurezza, ha perfettamente senso.
Questa PR dovrebbe risolvere il problema:
- aggiungendo un
data-download-hrefal link di download della lightbox quando gli upload S3 sono abilitati - l’URL utilizzato è il nuovo schema di URL breve con un parametro
dl=1che farà sì che il controller generi un URL S3 firmato con la corretta disposizione del contenuto e il nome del file
In altre parole, il link di download nella lightbox ora avrà un aspetto simile a /uploads/short-url/mTGbg4Ld2iBYAbfTvEjGXP2LtVm.pdf?dl=1, che reindirizzerà a un URL S3 firmato con content-disposition: "attachment; filename=original.png".
Penso che questa sia l’opzione più semplice e diretta; inoltrare tramite l’applicazione sarebbe leggermente meno efficiente, poiché il file scaricato dovrebbe passare da S3 al server Discourse e poi al client.