Ok, j’ai trouvé l’endroit où la génération des pièces jointes Markdown est générée et, d’après ce que je comprends de l’API des plugins, on ne peut pas (facilement) la remplacer (je pense même qu’on ne devrait pas le faire).
Donc, mon idée initiale d’ajouter un paramètre ?dl=1 à ces URL semble être la mauvaise approche.
Concernant le fait de ne pas forcer le téléchargement pour les URL courtes résolues : si je comprends bien l’argument contre les ACL publiques sur les buckets S3, il faudrait soit :
- servir les fichiers de S3 via un CDN (irréalisable pour les pièces jointes, comme l’a souligné @martin, car nous pourrions ne pas être en mesure de définir correctement le nom de fichier pour le téléchargement dans ce cas)
- créer une URL pré-signée pour l’objet S3
Mais le comportement actuel ne fait ni l’un ni l’autre et s’attend à ce que le bucket S3 ait une ACL publique. C’est également le cas pour les fournisseurs S3 pris en charge (y compris Amazon), alors je me demandais pourquoi ne pas faire en sorte que l’option force_download dans Discourse.store.url_for soit définie par défaut sur true (https://github.com/discourse/discourse/blob/v2.8.0.beta11/app/controllers/uploads_controller.rb#L121) lors de la résolution des URL courtes pour les stockages S3 ?