@Wolfak

Как отправить файл POST запросом через HttpURLConnection?

Разобрался в предыдущем запросе как отправлять POST запрос с параметрами на PHP сервер с помощью HttpURLConnection в Android. Теперь столкнулся с проблемой отправки файла (изображение или видеофайл) с текстовыми параметрами (ид и логин пользователя).

После диалога выбора фото я имею URI и Bitmap тип. Выбор видео пока не смог реализовать.

Знаю что нужно изменить тип запроса на мульти тип, но не могу разобраться как переделать свой код:
class SendLoginData extends AsyncTask<Void, Void, Void> {

        String resultString = null;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {
            try {
                String myURL = "http://site.ru/";
                String parammetrs = "param1=1&param2=XXX";
                byte[] data = null;
                InputStream is = null;

                try {
                    URL url = new URL(myURL);
                    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                    conn.setRequestMethod("POST");
                    conn.setDoOutput(true);
                    conn.setDoInput(true);

                    conn.setRequestProperty("Content-Length", "" + Integer.toString(parammetrs.getBytes().length));
                    OutputStream os = conn.getOutputStream();
                    data = parammetrs.getBytes("UTF-8");
                    os.write(data);
                    data = null;

                    conn.connect();
                    int responseCode= conn.getResponseCode();

                    ByteArrayOutputStream baos = new ByteArrayOutputStream();

                    if (responseCode == 200) {
                        is = conn.getInputStream();

                        byte[] buffer = new byte[8192]; // Такого вот размера буфер
                        // Далее, например, вот так читаем ответ
                        int bytesRead;
                        while ((bytesRead = is.read(buffer)) != -1) {
                            baos.write(buffer, 0, bytesRead);
                        }
                        data = baos.toByteArray();
                        resultString = new String(data, "UTF-8");
                    } else {
                    }



                } catch (MalformedURLException e) {

                    //resultString = "MalformedURLException:" + e.getMessage();
                } catch (IOException e) {

                    //resultString = "IOException:" + e.getMessage();
                } catch (Exception e) {

                    //resultString = "Exception:" + e.getMessage();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            if(resultString != null) {
                Toast toast = Toast.makeText(getApplicationContext(), resultString, Toast.LENGTH_SHORT);
                toast.show();
            }

        }
    }

Надеюсь на вашу помощь. Перечитал кучу информации в интернете, но так и не разобрался.
Спасибо.
  • Вопрос задан
  • 7424 просмотра
Решения вопроса 1
@coden55
https://github.com/kevinsawicki/http-request - рекомендую библиотеку, использует HttpURLConnection, просто и удобно.

В вашем случае будет как то так:
HttpRequest request = HttpRequest.post("http://site.ru/");
request.part("param1", "1");
request.part("param2", "xxx");
request.part("file", new File("/test.txt"));
int status = request.code();
if(status == 200) {
System.out.println(request.body());
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы