WedX - журнал о программировании и компьютерных науках

Загрузить файл с помощью HTTP Post multipart - 4Sharing API J2ME

В настоящее время я разрабатываю приложение J2ME. У меня проблемы с загрузкой файлов. Кажется, я не знаю, какая часть моего кода неверна. Вот мой код:

public void UploadImage(long newFileId, String url, String bytes){
    HttpConnection conn = null;
      OutputStream os = null;
      InputStream s = null;
      StringBuffer responseString = new StringBuffer();


      try
      {

         System.out.println(System.getProperty("HTTPClient.dontChunkRequests"));
         conn.setRequestMethod(HttpConnection.POST);
         conn = (HttpConnection)Connector.open(url);
         conn.setRequestProperty("resumableFileId", ""+newFileId);
         conn.setRequestProperty("resumableFirstByte", ""+0);
         conn.setRequestProperty("FilePart", bytes);


         // Read

         s = conn.openInputStream();
         int ch, i = 0, maxSize = 16384;
         while(((ch = s.read())!= -1 ) & (i++ < maxSize)) 
         {
            responseString.append((char) ch);
         }

         conn.close();
         System.out.println(responseString.toString());
         String res = uploadFinishFile(newFileId, bytes);
         if(res.length()>0)
             System.out.println("File uploaded.");
         else
           System.out.println("Upload failed: "+res);
      }
      catch (Exception e)
      {
          System.out.println(e.toString());
      }


}

Это java-код, который я пытаюсь преобразовать в j2me:

try {
  HttpClient client = new DefaultHttpClient();
  HttpPost post = new HttpPost(url);
  MultipartEntity me = new MultipartEntity();
  StringBody rfid = new StringBody("" + newFileId);
  StringBody rfb = new StringBody("" + 0);
  InputStreamBody isb = new InputStreamBody(new BufferedInputStream(new FileInputStream(f)), "FilePart");
  me.addPart("resumableFileId", rfid);
  me.addPart("resumableFirstByte", rfb);
  me.addPart("FilePart", isb);

  post.setEntity(me);
  HttpResponse resp = client.execute(post);
  HttpEntity resEnt = resp.getEntity();

  String res = da.uploadFinishFile(login, password, newFileId, DigestUtils.md5Hex(new FileInputStream(f)));
  if(res.isEmpty())
  System.out.println("File uploaded.");
  else
    System.out.println("Upload failed: "+res);
} catch (Exception ex) {
  System.out.println("Upload failed: "+ex.getMessage());
}

Ответы:


1

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

Взгляните на загрузку составных файлов HTTP Post в Java ME. Вы можете использовать класс HttpMultipartRequest и изменить свой код на:

Hashtable params = new Hashtable();
params.put("resumableFileId", "" + newFileId);
params.put("resumableFirstByte", "" + 0);

HttpMultipartRequest req = new HttpMultipartRequest(
    url,
    params,
    "FilePart", "original_filename.png", "image/png", isb.getBytes()
);

byte[] response = req.send();
08.11.2013
  • @JBCagampan Ответ был отредактирован в соответствии с вашими требованиями. Пожалуйста, дайте мне знать, если это решит вашу проблему, и установите как принятый ответ, если да. 11.11.2013
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: wedx@cp9.ru