Как отправить байтовый массив с устройства Android на сервлет - PullRequest
1 голос
/ 26 марта 2012

Мне нужно отправить некоторый байтовый массив с устройства Android на сервлет.Для этого я пытаюсь использовать следующий код:

Сервлет:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws 
ServletException, IOException {

  DataInputStream in = new DataInputStream((InputStream)request.getInputStream());
   response.setContentType("text/plain");
    byte[] buffer = new byte[1024];
    int len = 0;
    File file;
    file=new File(getServletContext().getRealPath("/POST_LOG!!!!.txt"));
    if(!file.exists()){
        file.createNewFile();
    }
    while ((len = in.read(buffer)) > 0) {
          FileOutputStream fos = new FileOutputStream(getServletContext().getRealPath("/POST_LOG!!!!.txt"), true);

           fos.write(buffer);            
           fos.close(); 
    }

    PrintWriter out = response.getWriter();
    out.write("Done");
    out.close();

Сторона устройства:

URL uploadUrl;
    try {
        uploadUrl = new URL(url);
        HttpURLConnection c = (HttpURLConnection) uploadUrl
                .openConnection();
        c.setRequestMethod("POST");

        c.setDoInput(true);
        c.setDoOutput(true);
        c.setUseCaches(false);
        c.connect();
        OutputStream out = c.getOutputStream();

        for (int i = 0; i < 1000; i++) { // generate random bytes for
                                            // uploading
            byte[] buffer = new byte[256];
            for (int j = 0; j < 256; j++) {
                Random r = new Random();
                buffer[j] = (byte) r.nextInt();
            }

            out.write(buffer);
            out.flush();
        }

        out.close();

    } catch (Exception e) {
        MessageBox("Error. " + e.toString());
    }

    return (long) 0;
}

Я не понимаю, почему этот код не работает.Когда я пытаюсь отладить мой метод POST, он даже не вызывается.Буду благодарен за ваши примеры

Ответы [ 2 ]

2 голосов
/ 27 марта 2012

Я нашел решение. Я просто изменил свой код на стороне устройства, используя собственный InputStream.

Сторона устройства:

HttpPost httpPost = new HttpPost(url);
    httpPost.setEntity(new InputStreamEntity(new MyInputStream(),
            4096 * 1024 * 10));
    HttpResponse response = null;

    try {
        response = httpClient.execute(httpPost);
    } catch (ClientProtocolException e) {
        e.printStackTrace();
        httpPost.abort();
    } catch (IOException e) {
        e.printStackTrace();
        httpPost.abort();
    }
0 голосов
/ 26 марта 2012

У вас есть много вариантов:

  • отправить значения байтов: 125,11,25,40 (это глупый вариант)
  • отправить его в кодировке base64 или hex, а затем декодировать его (используйте apache commons-codec)
  • отправить как multipart/form-data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...