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

Как заставить сервер 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 по желанию. Я не могу сравнить файлы конфигурации сервера, потому что у меня нет доступа администратора к работающему серверу.

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

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

Ответы [ 5 ]

6 голосов
/ 29 декабря 2008

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

<FilesMatch "\.(?i:pin)$">
  Header set Content-Disposition attachment
</FilesMatch>
0 голосов
/ 29 декабря 2008

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

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

0 голосов
/ 29 декабря 2008

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

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

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

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

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

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

0 голосов
/ 29 декабря 2008

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

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

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

Misha

...