Опубликовать BASE64 на сервере - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь отправить одно изображение с BASE64 на сервер и всегда получаю 408 с этим сообщением «Тело запроса не содержит указанное количество байтов. Получено 13.140, ожидается 88.461». Как я могу решить это?

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

 Gson gson = new Gson();
                    String jsonParam = gson.toJson(enviarPlataforma);

                    URL url = new URL("");
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("POST");

                    conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
                    conn.setRequestProperty("Accept", "application/json");
                    conn.setDoOutput(true);
                    conn.setDoInput(true);
                    conn.setFixedLengthStreamingMode(jsonParam.getBytes().length);


                    Log.i("JSON", jsonParam.toString());
                    DataOutputStream os = new DataOutputStream(conn.getOutputStream());
                    os.writeBytes(jsonParam);

                    os.flush();
                    os.close();

                    Log.i("STATUS", String.valueOf(conn.getResponseCode()));
                    Log.i("MSG", conn.getResponseMessage());

                    conn.disconnect();
                } catch (Exception e) {
                    e.printStackTrace();
                }

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я решаю свою проблему. Я не знаю почему, но когда я использую Fiddler, я получил это сообщение.

Спасибо, ребята.

0 голосов
/ 03 мая 2018

Должны быть взяты байты UTF-8 и отправлены как есть. DataOutputStream для чего-то совершенно другого. Поскольку это одна запись, вы можете просто использовать OutputStream, который вы получаете от соединения. BufferedOutputStream, вероятно, не имеет смысла.

Промывка перед закрытием никогда не нужна. Нужно промывать только на стоящей, продолжающейся линии.

Try-with-resources закрывается автоматически, даже если возникло исключение.

                conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
                conn.setRequestProperty("Accept", "application/json");
                conn.setDoOutput(true);
                //conn.setDoInput(true);

                byte[] content = jsonParam.getBytes("UTF-8"):
                conn.setFixedLengthStreamingMode(content.length);

                Log.i("JSON", jsonParam.toString());
                try (OutputStream os = conn.getOutputStream()) {
                    os.write(content);
                }
...