Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Снова CGI:передача файла СЕРВЕРОМ

7
24 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Доброго времени суток
Весьма благодарен тем,кто помог мне в предыдущей теме по CGI.Также я понял,что писать CGI-приложение на асме–не буду говорить какое геморное занятие(там же даже простейшие операции со строками трудно реализовать).Поэтому начал делать на VB и добился определённых результатов(намного больше,чем на асме)

Впрочем,это было лирическое отступление.Вот сама суть
Мой сервер уже умеет показывать клиенту диски на моём компьютере и всё их содержимое(т.е. файлы и папки).С навигацией по папкам тоже всё нормально(долго ж я мучался,чтобы нормально обработать переход по папке вверх,"..",то есть:))
Теперь мне осталось самое последнее:реализовать передачу файла.Я так полагаю,что она реализуется тем же самым способом,только в заголовке запроса будет уже не Content-type: text/html,а другой тип.Тут 2 вопроса:какой должен быть тип для передачи любого файла и в каком виде данные должны уходить?
Пытался найти ответы на них сам,но ничего особого не нашёл,ибо даже вопрос точно не могу сформулировать.На те,что я формулировал,ничего интересного не попалось
Искал здесь в статьях и нашёл про Media типы и подтипы.Да,спасибо тем людям,что потрудились создать такой большой список(а он действительно большой!).Остался вопрос с тем,какой именно тип выбрать(я предполагаю,что multipart/mixed,по аналогии со случаем отправки файла на сервер),но не знаю,в каком формате должны уходить данные(может быть,и MIME-тип другой)

Подскажите,пожалуйста
244
24 июня 2009 года
UAS
2.0K / / 19.07.2006
Допустим вот:
 
Код:
header("Content-type: application/octetstream; charset=windows-1251"); // кодировка и mime-тип файла
header("Content-Length: %d")); // размер файла (в байтах вроде как)
header("Content-Disposition: attachment; filename=%s"); // тоже надо)

Можно определять расширение файла и в зависимости от этого отдавать нужный mime-тип. Отдача файла происходит путем простого его вывода в поток.

ЗЫ: то, что я привел код на php - это не существенно. Так как принцип работы зависит не от языка, а от протокола. Так что просто шлите соответствующие заголовки в поток с помощью VB, а затем в поток отправляйте содержимое файла
12
25 июня 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: @pixo $oft

Тут 2 вопроса:какой должен быть тип для передачи любого файла и в каком виде данные должны уходить?
Пытался найти ответы на них сам,но ничего особого не нашёл,ибо даже вопрос точно не могу сформулировать.На те,что я формулировал,ничего интересного не попалось


1) Список зарегистрированных MIME type находится тут: http://www.iana.org/assignments/media-types/
Вообще очень рекомендую посмотреть файлик mime.types в папке conf апача.

2) Открою большую тайну. Все данные передаются в двоичной форме. Какой именно они должны иметь вид всегда можно найти в описании требуемого протокола. В данном случае читай HTTP протокол, там это все довольно подробно описано.

7
25 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Благодурю за быстрый ответ
Хотелось бы только кое-что уточнить:в коде,приведённом UAS'ом
0)после каждого заголовка идёт только 1 CRLF?
1)%d–тут будет размер только передаваемых данных?
2)%s–а здесь только имя файла,полный путь к нему(вряд ли,ИМХО) или любое от балды взятое имя(которое,в таком случае,будет отображаться при закачке)?
3)после последнего заголовка идут 2 CRLF'а,а затем бинарный поток?
244
25 июня 2009 года
UAS
2.0K / / 19.07.2006
0) ну вроде как да. Хотя, не будет работать - поставьте два. Я точно сказать не могу - программировать практически бросил ща) Да и обычным выводом в поток заголовки не отсылал (не приходилось).
1) Да, того файла, который будете отдавать.
2) Любое от балды имя. Оно обычно отображается при скачке. Полное имя (с путем) не надо.
3) хз, в связи с пунктом "0". Но полагаю, что так. По крайней мере, опять же, просто попробуйте и посмотрите что получите=) Ну или почитайте спецификацию HTTP
7
25 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Делал всё как ты посоветовал(заголовки,т.е.).У тебя небольшая ошибочка была–"application/octetstream" пишется с дефисом(в RFC нашёл).Впрочем,оно работало и так,и так

Сами RFC смотрел,они сильно большие и никакой особо полезной информации я там не нашёл(что в каком порядке писать)

В общем,код передачи файла уже написан,но он как-то странно работает:всегда в начале файла выдаёт какой-то мусор(причём переменного размера!:(),а конец файла недодаёт,естественно
В качестве мусора выступает всякая байда,причём она всегда начинается с числа,затем идёт окончание имени файла(последние несколько символов),потом пару раз встречается его начало,потом целиком само имя файла(между этими данными,конечно же,всякий нечитаемый мусор),полное имя файла(с путём),и только потом идёт само содержимое.Прошу заметить,что имена файлов в Юникоде

В чём дело?Ведь я начинаю читать требуемый файл с начала,и он,конечно же,ничего лишнего не содержит.Может,это Опера при закачке добавляет эту муть?Подскажите,пожалуйста

P.S.Могу выложить код отправки файла или даже весь,а также несколько примеров закачанных и исходных файлов.Может быть,поможет…
240
25 июня 2009 года
aks
2.5K / / 14.07.2006
Код выкладывай, че гадать то.
12
25 июня 2009 года
alekciy
3.0K / / 13.12.2005
Цитата: @pixo $oft

Сами RFC смотрел,они сильно большие и никакой особо полезной информации я там не нашёл(что в каком порядке писать)


?!?!? ой,ну только не нужно утверждать, что там ни чего нет.

http://www.faqs.org/rfcs/rfc2616.html

Начиная с п.4 идет описание структуры заголовков и правила их формирования.

7
25 июня 2009 года
@pixo $oft
3.4K / / 20.09.2006
Кстати,почему-то при скачке некоторых файлов использование памяти резко скачет вверх,но после завершения скрипта не освобождается!
И ещё–NTLdr мне почему-то не удалось закачать(надеюсь,все знают про этот файлик)–при попытке сделать это загрузка процессора подскакивает до 100% и так на протяжении долгого времени.Я не дождался,прибил программу

Вот вам исходник,пожалуйста.Надеюсь,у вас найдётся чем скомпилировать:)
Если что,обращайтесь–я бы выложил и .exe,но их тут не любят
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог