У меня есть несколько пользователей-инженеров, которые хотят прикреплять к своим сообщениям файлы данных с нестандартными расширениями. По сути, это обычные текстовые файлы, но содержащие расширенные символы ASCII.
Я попытался обновить конфигурацию NGINX в Discourse, чтобы указать типы MIME для этих файлов, но это не сработало. Две недели назад я создал тему (How to customize MIME media type emitted for certain attachments?) на эту тему, но пока не получил ответов. Даже если NGINX не обновлён, он всё равно будет обслуживать неизвестные типы файлов с использованием резервного типа MIME “application/octet-stream”. Пока что меня это устраивает.
Однако, когда пользователи пытаются загрузить эти файлы данных в сообщение (либо используя кнопку «Загрузить», либо перетаскиванием), появляется всплывающее окно с ошибкой от Discourse, подобное этому:
Похоже, что при загрузке файлов Discourse пытается «проявить смекалку» и определить, является ли файл изображением или чем-то другим. Более того, судя по всему, это определение происходит на основе содержимого файла (похоже на стандартную Unix-команду “file”). Я предполагаю, что это нужно, чтобы Discourse мог решить, следует ли встроить файл в содержимое сообщения или разместить его отдельно как вложение.
В случае с этими файлами данных такая проверка ошибочно определяет их как изображения. Просто ради интереса я поместил несколько таких файлов на машину с Ubuntu и проверил их с помощью команды “file”, и действительно, они были определены как “JPEG image data”.
Есть ли способ загрузить файлы без попытки Discourse определить, являются ли они изображениями? То есть: «Пожалуйста, загрузите это как вложение, независимо от содержания, не встраивайте»?
В качестве альтернативы я мог бы настроить Discourse на разрешение загрузки ZIP-файлов и попросить пользователей архивировать свои файлы перед загрузкой, но мне не хотелось бы открывать сайт для загрузки случайных ZIP-файлов. Это кажется проблемой безопасности.
Заранее спасибо за любую помощь!




