Модераторы: Illuminaty
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка файла без расширения, вызов диалога "сохранить как..." 
:(
    Опции темы
dimon_zh
Дата 14.2.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Народ, может кто сталкивался, как решить такую проблему. 

На странице имеется тег <a href="filename">ссылка на файл</a>. Имя файла расширения не имеет, сам файл двоичный (тоесть не текстовый). При клике на ссылку хотелось бы получить диалог загрузки файла, аналогично тому, как если в контекстном меню выбрать "Сохранить объект как...". 

Реально же происходит следующее: браузер воспринимает файл как "текстовый". При клике на ссылке он начинает его открывать на новой странице в текстовом виде (в виде бессмысленного набора символов естественно), а при "Сохранить как..." в окне выбора папки куда грузить имя файла подставляет в виде "filename.txt"

Вопрос: Как в ссылке указать что файл двоичный и что его никоим образом не надо открывать, а строго "сохранять"?
PM MAIL   Вверх
oFF_rus
Дата 14.2.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.1.2008

Репутация: нет
Всего: 1



Мне кажется, здесь проблему надо решать не на уровне тега, а на уровне WEB сервера.

Например, Apache имеет настройку 
Код

#
# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value.  If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#

DefaultType text/plain

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

В комментариях написано - если на вашем сервере больше текстовых файлов, то делайте так, если больше бинарных (которые надо не показывать а сохранять), то делайте иначе.

Короче, я думаю, здесь надо менять настройки сервера, а на уровне тегов страницы проблему не решить.
PM MAIL   Вверх
dimon_zh
Дата 14.2.2008, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 два браузера ведут себя по-разному ...

А сам файл - двоичный, просто расширение замаскировано из соображений противодействия блокирования "видео-расширений" со стороны файерволов

user posted image

Это сообщение отредактировал(а) dimon_zh - 14.2.2008, 14:24
PM MAIL   Вверх
oFF_rus
Дата 14.2.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.1.2008

Репутация: нет
Всего: 1



Цитата

1. Работа Apach-a и соответственно влияние его настроек заканчивается на стороне сервера при выдаче html-страницы, дальше её анализом и визуализацией на экране занимается уже клиентская программа - браузер;

Да, работа Apach-a заканчивается при выдаче html-страницы. Однако, в том потоке данных, который выдаёт Apache браузеру, содержится не только html-страница, но и управляющие строки о том, что это за страница, как её лучше показывать. Ищи в интернете по строке "http headers" или просто посмотри на этой странице кусочек показывающий "HTTP ответ". В этом кусочке нас интересует строка "Content-Type".

Цитата

2. Браузер у каждого клиента свои и настроен по-своему и то как реагировать на клики на ссылках, по-идее, больше относится к свойствам браузера нежеле к Apach-у;

Браузеры у всех свои, как реагировать на ссылки решают именно они. Обычно они реагируют на ссылки просто - отправляют запрос на сервер "дайте мне файл". А дальше уже сервер решает какой дать файл, какие заголовки (http headers) прописать. И дело браузера принять файл. Будет он реагировать на файл так, как ему посоветовал сервер или нет - дело браузера.

Цитата

3. "Опера" при клике левой кнопкой открывает диалог сохранение, где видно что тип "application/octet-stream" она распознаёт, но при этом хочет сохранять файл с расширением html (смотри рис.1);

похоже опера как раз не очень доверяет серверу и проверяет, а что же тот ей подсунул. И определяет там нечто подозрительное (непечатные символы, видимо), потому и работает с файлом как с бинарным. Оперой не пользуюсь, могу только предполагать. Но то, что Опера предлагает расширение HTML мне кажется говорит в пользу того, что в заголовке (header) стоит что-то вроде
Код

Content-Type: text/plane

Кстати, какое расширение предлагает опера для небинарных (текстовых) файлов без расширения?

Цитата

5. При одних и тех-же настройках Apach-a два браузера ведут себя по-разному ...

Потому что это два разных браузера, причём авторы Оперы очень хотели бы, чтобы пользователи выбирали именно их браузер, потому стараются сделать его более умным. smile
PM MAIL   Вверх
dimon_zh
Дата 14.2.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Всё-таки насколько приятно уметь дело с умным человеком, который к тому же запросто способен написать ответ, состоящий не из 3-х скупых строчек  smile 

Так вот, к настройкам Apach-а я, как арендатор чужого хостинга, доступа естественно не имею, а если бы и имел, то все-таки сомневаюсь, что, установив тип по-умолчанию для хранящихся на сервере файлов (где есть как текстовые так и бинарные), ситуация бы принципиально изменилась (тем более что, как видно из рисунка, даже определив правильно application/octet-stream браузер всё-равно делает неправильный вывод) - тут похоже нужен индивидуальный подход к каждому файлу конкретно. 

А как прямо указать файлу его Content-Type? Или как вставить его в http-заголовок? Может тогда делать ссылку не так <a href="filename">ссылка на файл</a>, а так <a href="getfile.php?file=filename">ссылка скрипт выдачи файла</a>, а в этом скрипте каким-то образом указать тип файла и его имя? Я, честно говоря, пока знаю только как скриптами страницы формировать, но как скриптом файл выдать ... smile 

Цитата

Кстати, какое расширение предлагает опера для небинарных (текстовых) файлов без расширения?

ну тут всё просто - раз это текст, то она предлагает его сохранить как html-страницу smile
PM MAIL   Вверх
oFF_rus
Дата 14.2.2008, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 25.1.2008

Репутация: нет
Всего: 1



Цитата

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


я PHP не знаю, но поиск дал эту ссылку:
работа с http headers в php

особенно полезен  для тебя на той странице будет блок "Example#1 Download dialog" smile
Там и заголовок "Content-type" устанавливается и файл читается. И ещё один очень полезный заголовок - "Content-Disposition". Он заставляет браузер обязательно показывать окошко "Куда хотите сохранить", даже если для этого типа файлов настроено "открывать в браузере". Почитай комментарии в конце страницы - там ещё что-то советуют.

Только сразу подумай, что будет, когда злобный хакер попросит твой скрипт выдать ему файл с паролями, с исходным кодом твоих скриптов и т.п. smile
PM MAIL   Вверх
dimon_zh
Дата 14.2.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.1.2008

Репутация: нет
Всего: нет



Класс!  smile  oFF_rus, спасибо!  smile ... а говоришь php не знаешь - да то ты просто не успел ;) 
А по-поводу злобных хакеров ... ну, я думаю, если их не обижать - то с чего им быть злобными-то?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Вёрстка веб-сайтов | Следующая тема »


 




[ Время генерации скрипта: 0.0899 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.