Créeme, he pasado días investigando esto y también me pareció extraño, pero establecer content-disposition: attachment; filename=X para todos los archivos multimedia excepto las imágenes imita perfectamente cómo se sirven actualmente los archivos multimedia desde el almacenamiento local.
En resumen, ¡NO! Puedo reproducirlos usando oneboxing si es necesario, pero el enlace de descarga directa [media_file](path_to_media_file) (donde la ruta es local o de S3) debería descargar el archivo usando su nombre original, tal como lo hace en el almacenamiento local (y para los archivos migrados a S3).
Pero esto de repente ya no es posible para las subidas directas a S3: el enlace [media_file](S3_path_to_media_file) reproduce el archivo multimedia en una nueva pestaña (lo cual no es necesario, ya que eso es lo que hace oneboxing), y al intentar descargarlo desde los controles del reproductor también pierde su nombre original.
Esperaría que los archivos alojados localmente y en S3 se comporten igual, ¿de acuerdo? Con tu propuesta, la funcionalidad se invertiría por completo para las subidas alojadas en S3, no solo para las nuevas, sino también para las migradas.
Aquí hay un caso detallado y por qué creo que mi propuesta es correcta (es decir, mantiene la misma funcionalidad para las subidas alojadas tanto localmente como en S3):
Archivos alojados localmente
Tengo un repositorio grande (más de 5000) de archivos de audio (voz) que van de 1 a 10 MB, con un total de ~40 GB, que actualmente están alojados en almacenamiento local y ahora se están transfiriendo a S3 (esto es por diseño, no quiero que estén alojados en un servicio de terceros). Esto ya funciona bastante bien desde el punto de vista del rendimiento, pero ahora tiene sentido migrar a S3 debido al aumento de los costos de almacenamiento y la opción de usar una CDN con S3.
Estos archivos están optimizados para el tamaño y no están destinados a ser transmitidos, sino descargados y escuchados localmente (para clientes con ancho de banda/conectividad limitado). Los archivos se suben por lotes y luego se hacen referencia en la publicación cruda usando enlaces generados a partir de sus respectivos valores SHA1 usando: [dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3) y se pueden descargar usando su nombre original haciendo clic en el enlace directo al archivo (ver ejemplo aquí).
Si, por otro lado, estos enlaces fueran oneboxed, aún podrían reproducirse directamente desde el servidor de Discourse (y también descargarse desde los controles del reproductor, nuevamente con el nombre original).
Archivos que fueron migrados a S3
Cuando las subidas se migran desde el almacenamiento local a S3 usando uploads:migrate_to_s3, ocurren dos cosas:
- Se establece
content-disposition: attachment; filename=X para todas las subidas excepto las imágenes
- Los enlaces locales directos
[dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3) en publicaciones crudas se reemplazan con enlaces de S3 [dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3)
Esto imita las subidas alojadas localmente en todos los aspectos (enlaces de descarga con nombres originales, así como oneboxing).
Archivos recién subidos a S3
content-disposition: attachment; filename=X no se establece para todos los archivos multimedia
- Los archivos recién subidos se hacen referencia usando una URL corta en crudo, pero los enlaces cocinados aún apuntan directamente a
https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3
- hacer clic en el enlace de URL corta o en el enlace de S3 insertado manualmente
[dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3) abre el archivo en una nueva pestaña en lugar de descargarlo.
Como content-disposition no está establecido, esto ahora difiere de cómo se sirven los archivos multimedia desde el almacenamiento local (oneboxing aún funciona, pero los enlaces de descarga con nombres originales ya no están disponibles).
Si necesitas información adicional, házmelo saber.