У меня есть приложение Rails (Redmine), которое работает с Nginx. Если я нажимаю на какое-либо вложение, мой браузер (firefox, то есть Chrome) просит меня загрузить файл. Но если я нажимаю на вложение типа txt, мой браузер откроет этот файл в браузере.
Насколько я понимаю, это задача Nginx - открыть файл в браузере или скачать. Как я могу это настроить?
Изменение Content-Type
из .txt
файлы могут работать, но это несколько рискованный способ решить эту проблему, потому что вы не можете на 100% гарантировать, что браузер пользователя отреагирует так, как вы ожидаете. Более того, неправильно называть .txt
файл как двоичный файл.
Вместо этого я предлагаю использовать стандартный способ заставить браузер загружать, а не отображать файл, то есть использовать Content-Disposition
заголовок со значением attachment
(RFC 2183, смотрите также RFC 2616).
Например, это nginx location
блок отправит такой заголовок с .txt
файлы под /downloads/
URI, и поэтому они будут вынуждены скачать:
location ~ ^/downloads/.*\.txt$ {
add_header Content-Disposition "attachment";
}
Таким образом, вы можете добавить другое подходящее соответствие и т. Д., Соответствующее вашей конфигурации.
Тип по умолчанию для расширения txt - text / plain. Это поведение описано в файле mime.types. Использовать http://nginx.org/en/docs/http/ngx_http_core_module.html#default_type или http://nginx.org/en/docs/http/ngx_http_core_module.html#types чтобы переопределить его (может быть установлено в application / octet-stream).
Вам нужно извлечь местоположение для загружаемого файла и установить его тип содержимого как application/octet-stream
.
В нашем сервисе есть следующее место для загружаемых промоматериалов (которые включают в себя PDF-файлы, изображения и некоторые документы, но я уверен, что он будет работать и с текстовыми файлами):
location /promomaterial/download/ {
add_header Content-Type application/octet-stream;
}
Каждый браузер, который мы пробовали, загружает все файлы из этого места, а не пытается их отобразить.