![]() |
Модераторы: Illuminaty |
![]() ![]() ![]() |
|
dimon_zh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 29.1.2008 Репутация: нет Всего: нет |
Народ, может кто сталкивался, как решить такую проблему.
На странице имеется тег <a href="filename">ссылка на файл</a>. Имя файла расширения не имеет, сам файл двоичный (тоесть не текстовый). При клике на ссылку хотелось бы получить диалог загрузки файла, аналогично тому, как если в контекстном меню выбрать "Сохранить объект как...". Реально же происходит следующее: браузер воспринимает файл как "текстовый". При клике на ссылке он начинает его открывать на новой странице в текстовом виде (в виде бессмысленного набора символов естественно), а при "Сохранить как..." в окне выбора папки куда грузить имя файла подставляет в виде "filename.txt" Вопрос: Как в ссылке указать что файл двоичный и что его никоим образом не надо открывать, а строго "сохранять"? |
|||
|
||||
oFF_rus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.1.2008 Репутация: нет Всего: 1 |
Мне кажется, здесь проблему надо решать не на уровне тега, а на уровне WEB сервера.
Например, Apache имеет настройку
которая и определяет, как браузер будет обрабатывать все файлы, кроме тех, которые Apache отличит по расширению и выставит для них другой тип. В комментариях написано - если на вашем сервере больше текстовых файлов, то делайте так, если больше бинарных (которые надо не показывать а сохранять), то делайте иначе. Короче, я думаю, здесь надо менять настройки сервера, а на уровне тегов страницы проблему не решить. |
|||
|
||||
dimon_zh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 29.1.2008 Репутация: нет Всего: нет |
oFF_rus, поправь меня если я не прав:
1. Работа Apach-a и соответственно влияние его настроек заканчивается на стороне сервера при выдаче html-страницы, дальше её анализом и визуализацией на экране занимается уже клиентская программа - браузер; 2. Браузер у каждого клиента свои и настроен по-своему и то как реагировать на клики на ссылках, по-идее, больше относится к свойствам браузера нежеле к Apach-у; 3. "Опера" при клике левой кнопкой открывает диалог сохранение, где видно что тип "application/octet-stream" она распознаёт, но при этом хочет сохранять файл с расширением html (смотри рис.1); 4. Эксплорер при клике левой кнопкой начинает открывать в текстовом виде (смотри рис.2), а при выборе из контекстного меню "Сохранить как..." хочет его сохранять с расширением txt (смотри рис.3) 5. При одних и тех-же настройки Apach-a два браузера ведут себя по-разному ... А сам файл - двоичный, просто расширение замаскировано из соображений противодействия блокирования "видео-расширений" со стороны файерволов ![]() Это сообщение отредактировал(а) dimon_zh - 14.2.2008, 14:24 |
|||
|
||||
oFF_rus |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.1.2008 Репутация: нет Всего: 1 |
Да, работа Apach-a заканчивается при выдаче html-страницы. Однако, в том потоке данных, который выдаёт Apache браузеру, содержится не только html-страница, но и управляющие строки о том, что это за страница, как её лучше показывать. Ищи в интернете по строке "http headers" или просто посмотри на этой странице кусочек показывающий "HTTP ответ". В этом кусочке нас интересует строка "Content-Type".
Браузеры у всех свои, как реагировать на ссылки решают именно они. Обычно они реагируют на ссылки просто - отправляют запрос на сервер "дайте мне файл". А дальше уже сервер решает какой дать файл, какие заголовки (http headers) прописать. И дело браузера принять файл. Будет он реагировать на файл так, как ему посоветовал сервер или нет - дело браузера.
похоже опера как раз не очень доверяет серверу и проверяет, а что же тот ей подсунул. И определяет там нечто подозрительное (непечатные символы, видимо), потому и работает с файлом как с бинарным. Оперой не пользуюсь, могу только предполагать. Но то, что Опера предлагает расширение HTML мне кажется говорит в пользу того, что в заголовке (header) стоит что-то вроде
Кстати, какое расширение предлагает опера для небинарных (текстовых) файлов без расширения?
Потому что это два разных браузера, причём авторы Оперы очень хотели бы, чтобы пользователи выбирали именно их браузер, потому стараются сделать его более умным. ![]() |
||||||||||
|
|||||||||||
dimon_zh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 29.1.2008 Репутация: нет Всего: нет |
Всё-таки насколько приятно уметь дело с умным человеком, который к тому же запросто способен написать ответ, состоящий не из 3-х скупых строчек
![]() Так вот, к настройкам Apach-а я, как арендатор чужого хостинга, доступа естественно не имею, а если бы и имел, то все-таки сомневаюсь, что, установив тип по-умолчанию для хранящихся на сервере файлов (где есть как текстовые так и бинарные), ситуация бы принципиально изменилась (тем более что, как видно из рисунка, даже определив правильно application/octet-stream браузер всё-равно делает неправильный вывод) - тут похоже нужен индивидуальный подход к каждому файлу конкретно. А как прямо указать файлу его Content-Type? Или как вставить его в http-заголовок? Может тогда делать ссылку не так <a href="filename">ссылка на файл</a>, а так <a href="getfile.php?file=filename">ссылка скрипт выдачи файла</a>, а в этом скрипте каким-то образом указать тип файла и его имя? Я, честно говоря, пока знаю только как скриптами страницы формировать, но как скриптом файл выдать ... ![]()
ну тут всё просто - раз это текст, то она предлагает его сохранить как html-страницу ![]() |
|||
|
||||
oFF_rus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 25.1.2008 Репутация: нет Всего: 1 |
я PHP не знаю, но поиск дал эту ссылку: работа с http headers в php особенно полезен для тебя на той странице будет блок "Example#1 Download dialog" ![]() Там и заголовок "Content-type" устанавливается и файл читается. И ещё один очень полезный заголовок - "Content-Disposition". Он заставляет браузер обязательно показывать окошко "Куда хотите сохранить", даже если для этого типа файлов настроено "открывать в браузере". Почитай комментарии в конце страницы - там ещё что-то советуют. Только сразу подумай, что будет, когда злобный хакер попросит твой скрипт выдать ему файл с паролями, с исходным кодом твоих скриптов и т.п. ![]() |
|||
|
||||
dimon_zh |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 29.1.2008 Репутация: нет Всего: нет |
Класс!
![]() ![]() А по-поводу злобных хакеров ... ну, я думаю, если их не обижать - то с чего им быть злобными-то? |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |