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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача бинарных файлов по http 
:(
    Опции темы
FoV
Дата 7.12.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

BYTE* MyFile = new BYTE[buf.st_size];

...

send(S,head.c_str(),nsize,0);// отправляем заголовок 
send(S,(char*)MyFile,buf.st_size,0);// отправляем файл 


Файл не приходит,хотя заголовки отправляются и скрипт на сервере запускается


PM MAIL   Вверх
Kallikanzarid
Дата 7.12.2008, 15:51 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



по http можно отправлять только текстовые файлы. Есть много способов закодировать бинарные файлы в виде текста, например
http://en.wikipedia.org/wiki/Base64
PM MAIL   Вверх
REZiaMIX
Дата 7.12.2008, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kallikanzarid @ 7.12.2008,  15:51)
по http можно отправлять только текстовые файлы. Есть много способов закодировать бинарные файлы в виде текста, например
http://en.wikipedia.org/wiki/Base64

Если бы было так , то не существовали бы щас такие простые хостинги.
По http вполне можно передать бинарный файл , без кодировки (например метод POST http)

Это сообщение отредактировал(а) REZiaMIX - 7.12.2008, 16:31


--------------------
user posted image
PM MAIL   Вверх
Kallikanzarid
Дата 7.12.2008, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Существование простых хостингов объясняется существованием libwww. Но может быть ты и прав.
PM MAIL   Вверх
REZiaMIX
Дата 7.12.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Kallikanzarid @ 7.12.2008,  16:43)
Существование простых хостингов объясняется существованием libwww. Но может быть ты и прав.

Файловых хостингов , иначе через что там отправляются файлы??? В теле запроса и приходят файлы


--------------------
user posted image
PM MAIL   Вверх
Void
Дата 7.12.2008, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Эти три строчки не говорят вообще ни о чём. Это вообще клиент или сервер? Какой формируется заголовок? (Желательно посмотреть сниффером, что именно отправляется по сети). Какая происходит ошибка и где?

Попытка применения телепатии: Content-Type указан правильно?


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
J0ker
Дата 7.12.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в заголовке POST указывается кодировка данных тела


--------------------
user posted image
PM MAIL   Вверх
FoV
Дата 14.12.2008, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот заголовок:
Код

long int cLength = (long int)buf.st_size + strlen("Content-Disposition: form-data; name='filename'; filename='3u21oybcposu0pn4ipindb7j7klqk0wd_4.jpg");
ostringstream stream;/* может быть в этом месте можно как-то попроще сделать?*/
stream << cLength;
head += "POST /a.php HTTP/1.1\r\nHost: " ;
head += ip;
head += "\r\nContent-Type: multipart/form-data;\r\n";
head += "Content-Length: ";
head += stream.str();
head += "\r\n\r\n";
head += "Content-Disposition: form-data; name='filename'; filename='3u21oybcposu0pn4ipindb7j7klqk0wd_4.jpg'\r\nContent-Type: image/jpeg\r\n";

PM MAIL   Вверх
Void
Дата 15.12.2008, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Странный какой-то код. Зачем заводить поток, а потом пользоваться конкатенацией строк? Зачем в начало потока пишется длина заголовка? (Понял. Несуразно, но ладно). Что в конце-концов отправляется в сеть?
И ещё: после заголовка «вложения» (Content-Type: image/jpeg) идут два CRLF, как положено?

Это сообщение отредактировал(а) Void - 15.12.2008, 18:11


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
xvr
Дата 15.12.2008, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(FoV @ 14.12.2008,  23:25)
Вот заголовок:
Код

long int cLength = (long int)buf.st_size + strlen("Content-Disposition: form-data; name='filename'; filename='3u21oybcposu0pn4ipindb7j7klqk0wd_4.jpg");
ostringstream stream;/* может быть в этом месте можно как-то попроще сделать?*/
stream << cLength;
head += "POST /a.php HTTP/1.1\r\nHost: " ;
head += ip;
head += "\r\nContent-Type: multipart/form-data;\r\n";
head += "Content-Length: ";
head += stream.str();
head += "\r\n\r\n";
head += "Content-Disposition: form-data; name='filename'; filename='3u21oybcposu0pn4ipindb7j7klqk0wd_4.jpg'\r\nContent-Type: image/jpeg\r\n";

Часть данных для тела multipart формируется явно неправильно. У него должен быть свой заголовок и свой Content-Length. Вы точно уверены, что вам нужен именно multipart?
PM MAIL   Вверх
FoV
Дата 19.12.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Часть данных для тела multipart формируется явно неправильно.

Поконкретнее можно? Мозила такой заголовок отправляет.
Цитата(Void @  15.12.2008,  17:20 Найти цитируемый пост)
И ещё: после заголовка «вложения» (Content-Type: image/jpeg) идут два CRLF, как положено?

Да, конечно
PM MAIL   Вверх
xvr
Дата 19.12.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(FoV @ 19.12.2008,  16:26)
Цитата

Часть данных для тела multipart формируется явно неправильно.

Поконкретнее можно? Мозила такой заголовок отправляет.

RFC1867
Цитата

  multipart/form-data contains a series of parts. Each part is expected
   to contain a content-disposition header where the value is "form-
   data" and a name attribute specifies the field name within the form,
   e.g., 'content-disposition: form-data; name="xxxxx"', where xxxxx is
   the field name corresponding to that field. Field names originally in
   non-ASCII character sets may be encoded using the method outlined in
   RFC 1522.

   As with all multipart MIME types, each part has an optional Content-
   Type which defaults to text/plain.  If the contents of a file are
   returned via filling out a form, then the file input is identified as
   application/octet-stream or the appropriate media type, if known.  If
   multiple files are to be returned as the result of a single form
   entry, they can be returned as multipart/mixed embedded within the
   multipart/form-data.

   Each part may be encoded and the "content-transfer-encoding" header
   supplied if the value of that part does not conform to the default
   encoding.

   File inputs may also identify the file name. The file name may be
   described using the 'filename' parameter of the "content-disposition"
   header. This is not required, but is strongly recommended in any case
   where the original filename is known. This is useful or necessary in
   many applications.


Пример
Цитата

        Content-type: multipart/form-data, boundary=AaB03x

        --AaB03x
        content-disposition: form-data; name="field1"

        Joe Blow
        --AaB03x
        content-disposition: form-data; name="pics"; filename="file1.txt"
        Content-Type: text/plain

         ... contents of file1.txt ...
        --AaB03x--

и
Цитата

        Content-type: multipart/form-data, boundary=AaB03x

        --AaB03x
        content-disposition: form-data; name="field1"

        Joe Blow
        --AaB03x
        content-disposition: form-data; name="pics"
        Content-type: multipart/mixed, boundary=BbC04y

        --BbC04y
        Content-disposition: attachment; filename="file1.txt"
        Content-Type: text/plain

        ... contents of file1.txt ...
        --BbC04y
        Content-disposition: attachment; filename="file2.gif"
        Content-type: image/gif
        Content-Transfer-Encoding: binary

          ...contents of file2.gif...
        --BbC04y--
        --AaB03x--

См. RFC2388


Это сообщение отредактировал(а) xvr - 19.12.2008, 22:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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