Как заставить сервер Apache 2 заставлять браузер открывать диалог передачи файлов?

Как заставить сервер Apache 2 заставить браузер открывать диалог передачи файлов, если URL-адрес указывает на файл с расширением .pln или .psa?

У меня есть простой LAMP-сервер с CentOS 5, Apache 2, MYSQL 5, PHP 5, недавно созданный компакт-диск CentOS 5.2 i386. Мое веб-приложение создает файлы для загрузки и импорта в пользовательское приложение. Расширения файлов:.psa и .pln. Как заставить мой сервер заставлять браузер открывать диалог передачи файлов? Если я укажу свой браузер на файл .psa или .pln на сервере Apache 2, содержимое файла будет отображаться во всплывающем окне как простой текст. Мне нужен диалог передачи файлов.

Веб-приложение, над которым я работаю, развертывается на другом веб-сервере и обрабатывает файлы .pln и .psa по желанию. Я не могу сравнивать файлы конфигурации сервера, потому что у меня нет доступа администратора к рабочему серверу.

Как изменить поведение моего сервера? Требуется ли изменение кода для моего кода веб-приложения (например, отправка явных заголовков)? Если да, то почему он работает против другого сервера? Можно ли избежать изменения кода при настройке поведения сервера по умолчанию?

Любая помощь будет оценена.

Ответ 1

Вы должны иметь возможность использовать директиву FilesMatch, чтобы добавить необходимый заголовок.

<FilesMatch "\.(?i:pin)$">
  Header set Content-Disposition attachment
</FilesMatch>

Ответ 2

Принуждение браузера делать что-то всегда сложно, так как браузер может игнорировать вас и делать то, что ему нравится:)

Тем не менее, большинство браузеров предложит пользователю диалоговое окно "Сохранить как", если заголовок "Тип контента" установлен в "application/octet-stream". Либо напишите простую оболочку cgi, которая обслуживает запрошенный файл с правильным заголовком, либо скрипта с помощью mime-типов Apache2 (смотрите в каталоге config.)

Надеюсь, это поможет, счастливый взлом (и счастливое Рождество, Новый год или все, что вы можете отмечать)

Миша

Ответ 3

Ahh, не знал об этом заголовочном файле, что, вероятно, лучший способ, так как он позволяет сохранить исходный тип MIME, нужно будет запомнить этот.

Ответ 4

Я попробовал несколько изменений конфигурации, которые не имели видимого эффекта.

  • Я добавил следующую строку в файл /etc/httpd/conf/httpd.conf:

Приложение AddType/октет-поток .pln.psa

Я перезапустил сервер Apache и не имел никакого эффекта.

  1. Я добавил следующие строки в файл /etc/httpd/conf/httpd.conf: Приложение ForceType/октет-поток Набор заголовков Content-Disposition Приложение ForceType/октет-поток Набор заголовков Content-Disposition Я перезапустил сервер Apache и не имел никакого эффекта.

Ответ 5

Если у вас есть Firefox (а если нет, почему бы и нет?), установите панель инструментов разработчика Chris Pedericks и проверьте правильность установки заголовков. Если это так, это может быть ошибка браузера. Как я уже сказал, вы не можете быть уверены, что любой браузер будет "правильно" интерпретировать заголовки ответов. О каком браузере мы говорим здесь?

Если заголовки не установлены правильно, вам может потребоваться повторная проверка вашего файла httpd.conf. Возможно, директивы, которые вы добавили, не в правильном разделе? (например, под неправильной директивой <Location> )