Посмотрев на это ещё раз, я думаю, что решение должно быть наоборот — задача uploads:migrate_to_s3 должна выполняться с условием if !FileHelper.is_supported_media?(name). Не имеет смысла добавлять заголовок content-disposition: attachment; filename=X для видео и аудио. Разве вы не воспроизводите эти файлы внутри поста Discourse, а не скачиваете их?
Таким образом, нам нужно следующее:
Без заголовка content-disposition attachment
- Изображения
- Видео
- Аудио
С заголовком content-disposition attachment и оригинальным именем файла
- Все остальные вложения/загрузки (PDF, TXT, CSV и т. д.)
Если я что-то упускаю, пожалуйста, не стесняйтесь добавить больше информации или примеров.