Acredite em mim, passei dias tentando resolver isso, e também me pareceu estranho, mas definir content-disposition: attachment; filename=X para todos os arquivos de mídia exceto imagens imita perfeitamente como os arquivos de mídia são atualmente servidos a partir do armazenamento local.
Em resumo, NÃO! Posso transmiti-los usando oneboxing se necessário, mas o link de download direto [media_file](path_to_media_file) — onde o caminho é local ou S3 — deve baixar o arquivo usando seu nome original, da mesma forma que funciona no armazenamento local (e para arquivos migrados para S3).
Mas isso de repente não é mais possível para uploads diretos no S3: o link [media_file](S3_path_to_media_file) transmite o arquivo de mídia em uma nova aba (não necessário, pois isso é o que o oneboxing faz), e ao tentar baixá-lo pelos controles do player de mídia, ele também perde seu nome original.
Eu esperaria que arquivos hospedados localmente e no S3 se comportassem da mesma forma, concorda? Com sua proposta, a funcionalidade seria completamente invertida para uploads hospedados no S3, não apenas para os novos, mas também para os migrados.
Aqui está um caso detalhado e por que acredito que minha proposta está correta (ou seja, ela mantém a mesma funcionalidade para uploads hospedados tanto localmente quanto no S3):
Arquivos hospedados localmente
Tenho um repositório grande (mais de 5 mil) de arquivos de áudio (fala) variando de 1 a 10 MB, com um total de ~40 GB, que atualmente estão hospedados no armazenamento local e agora estão sendo transferidos para o S3 (isso é por design, não quero que sejam hospedados em serviço de terceiros). Isso já funciona bastante bem do ponto de vista de desempenho, mas agora faz sentido migrar para o S3 devido aos custos crescentes de armazenamento e à opção de usar CDN com S3.
Esses arquivos são otimizados para tamanho e não são destinados a streaming, mas sim para download e reprodução local (para clientes com largura de banda/conectividade limitada). Os arquivos são enviados em lote e depois referenciados na postagem bruta usando links gerados a partir de seus respectivos valores SHA1, usando: [dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3) e podem ser baixados usando seu nome original ao clicar no link direto para o arquivo (veja o exemplo aqui).
Se, por outro lado, esses links fossem oneboxed, eles ainda poderiam ser transmitidos diretamente do servidor do Discourse (e também baixados pelos controles do player, novamente com o nome original).
Arquivos que foram migrados para o S3
Quando os uploads são migrados do armazenamento local para o S3 usando o uploads:migrate_to_s3, duas coisas acontecem:
content-disposition: attachment; filename=X é definido para todos os uploads exceto imagens
- links locais diretos
[dl_link](https://discourse.forum.tld/uploads/default/original/3X/0/1/0123..sha1.mp3) em postagens brutas são substituídos por links S3 [dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3)
Isso imita os uploads hospedados localmente em todos os aspectos (links de download com nomes originais de arquivo, bem como oneboxing).
Arquivos recém-enviados para o S3
content-disposition: attachment; filename=X não é definido para todos os arquivos de mídia
- arquivos recém-enviados são referenciados usando URL curta na postagem bruta, mas os links renderizados ainda apontam diretamente para
https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3
- clicar no link de URL curta ou no link S3 inserido manualmente
[dl_link](https://cdn_url/uploads/original/3X/0/1/0123..sha1.mp3) abre o arquivo em uma nova aba em vez de baixá-lo.
Como content-disposition não é definido, isso agora difere de como os arquivos de mídia são servidos a partir do armazenamento local (oneboxing ainda funciona, mas os links de download com nomes originais de arquivo não estão mais disponíveis).
Se precisar de informações adicionais, por favor, me avise.