Olhando isso novamente, acho que a solução é o contrário: a tarefa uploads:migrate_to_s3 deve ter a condição if !FileHelper.is_supported_media?(name). Não faz sentido adicionar o cabeçalho content-disposition: attachment; filename=X a vídeos e áudios. Você está transmitindo esses arquivos dentro de uma postagem do Discourse, não baixando-os?
Então, o que queremos é:
Sem cabeçalho content-disposition attachment
- Imagem
- Vídeo
- Áudio
Com cabeçalho content-disposition attachment e nome de arquivo original
- Todos os outros anexos/carregamentos (PDF, TXT, CSV, etc.)
Se eu não estiver vendo algo aqui, sinta-se à vontade para adicionar mais informações ou exemplos.