Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Послать файл в интернет 
V
    Опции темы
Majesty
Дата 17.6.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

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



Есть набор байт от файла. Нужно послать по HTTP пару параметров и сам файл. Делаю так:
Код
         conn = (HttpConnection) Connector.open( parent.url );
         String boundary = "1B"+System.currentTimeMillis();
         String crlf = "\r\n";
         StringBuffer sb = new StringBuffer();
// Login
         sb.append("--" + boundary + crlf);
         sb.append("Content-Disposition: form-data; name=login" + crlf);
         sb.append(crlf);
         sb.append(parent.login + crlf);
// Password
         sb.append("--" + boundary + crlf);
         sb.append("Content-Disposition: form-data; name=password" + crlf);
         sb.append(crlf);
         sb.append(parent.password + crlf);
// Image
         sb.append("--" + boundary + crlf);
         sb.append("Content-Disposition: form-data; name=photo" + crlf);
         sb.append(crlf);
         sb.append(parent.myfile.toString() + crlf);
// End
         sb.append("--" + boundary + "--" + crlf);
         byte[] output = sb.toString().getBytes();

         conn.setRequestMethod(HttpConnection.POST);
         conn.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
         conn.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");
//         conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
         conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
         conn.setRequestProperty("Content-Length", String.valueOf(output.length));
         os = conn.openOutputStream();
         os.write(output);
Всё отправляется, кроме файла. Полагаю, я залажал с myfile.toString() smile А как сделать правильно? smile

Добавлено через 1 минуту и 25 секунд
Т.е. на сервере пхп-скриптом снимаю дамп POST-запроса и массив FILES, в первом есть это:
Код
[login] => test_login
[password] => test_password
[photo] => [B@ea0ef881
а второй пуст :(
PM MAIL WWW   Вверх
Brodyaga
Дата 17.6.2008, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А что такое myfile можно спросить? какого типа? Да и другие переменные этого parent'а...
PM MAIL   Вверх
Majesty
Дата 17.6.2008, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

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



myfile - это набор байт, полученный с камеры телефона smile VideoControl.getSnapshot();
остальные переменные - стринги УРЛ, логин и пароль smile
PM MAIL WWW   Вверх
eugine_s
Дата 17.6.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

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



Набор байт не нужно переводить в строку.

os.write(myfile);


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


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

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



Хммм... Щас попробую...
PM MAIL WWW   Вверх
Majesty
Дата 17.6.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

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



Так он режет запрос на 39 чанков, удаляет из него Content-Length и запрос не доходит до сервера (судя по всему именно из-за отсутствия Content-Length) :(
Код

         conn = (HttpConnection) Connector.open( parent.url );
         String boundary = "1B"+System.currentTimeMillis();
         String crlf = "\r\n";
         StringBuffer sb = new StringBuffer();
         int l = 0;
// Login
         sb.append("--" + boundary + crlf);
         sb.append("Content-Disposition: form-data; name=login" + crlf);
         sb.append(crlf);
         sb.append(parent.login + crlf);
// Password
         sb.append("--" + boundary + crlf);
         sb.append("Content-Disposition: form-data; name=password" + crlf);
         sb.append(crlf);
         sb.append(parent.password + crlf);
// Image
         sb.append("--" + boundary + crlf);
         sb.append("Content-Disposition: form-data; name=photo" + crlf);
         sb.append(crlf);

         byte[] output = sb.toString().getBytes();
         byte[] end = new String(crlf + "--" + boundary + "--" + crlf).getBytes();
         l += output.length;
         l += end.length;
         l += parent.snapshot.length;

         conn.setRequestMethod(HttpConnection.POST);
         conn.setRequestProperty("If-Modified-Since", "29 Oct 1999 19:43:31 GMT");
         conn.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.0");
         conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
         conn.setRequestProperty("Content-Length", String.valueOf(l));
         os = conn.openOutputStream();
         os.write(output);
         os.write(parent.snapshot);
         os.write(end);

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


Новичок



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

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



Я не буду говорить точно.Но проверь правильность запросов.Возможно после User-Agent нужно проставить двоеточие( если таковое не делается явой).
Я например (не в яве) забывал пару раз двоеточее и серв попросту ничего не слал в ответ..
PM MAIL ICQ Jabber   Вверх
Majesty
Дата 17.6.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

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



Нет, всё отправляется правильно. Если я не ошибаюсь в своём понимании НТТР, из-за отсутствия Content-Length сервер просто ждёт, пока клиент закончит отправлять данные, когда клиент уже давно отсоединился... Вопрос только в том, куда девается этот долбаный Content-Length smile 
PM MAIL WWW   Вверх
Majesty
Дата 24.6.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 20.3.2005
Где: Almaty, Kazakhsta n

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



Так, косяк был предположительно в том, что Apache не понимает Transfer-encoding: chunked. Сделал следующее: в мидлете режу массив байт на куски размером 1024 байта и отправляю по-отдельности. На сервере РНР-скриптом склеиваю. Всё доходит, но файл не является JPG smile Чую, щас будут бить тапками, но попробую реабилитироваться smile Байты с камеры (ака файл) получаю так:
Код
byte[] snapshot = vc.getSnapshot("encoding=jpeg&quality=80");
Так должон ли он сжать информацию джипегом или нет? И как эту информацию таки получить на сервере в виде джипега? smile

Добавлено через 8 минут и 31 секунду
за'base64encode'ил и всё заработало smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




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


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

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