Intereting Posts
Как я могу сгенерировать древовидную структуру из таблицы в базе данных? Как эмулировать POSTing несколько полей формы флажка myField с Zend_Http_Client? Как узнать, какая дата была 5 дней назад? Создание метода конструктора в контроллере в Yii последний выбранный вариант после обновления страницы Сброс соединения Apache PHP5-FPM с помощью одноранговой сети facebook Uncaught OAuthException: токен активного доступа должен использоваться для запроса информации о текущем пользователе Получить результаты запроса для диапазона дат javascript-объект для php с использованием jquery ajax Добавить WordPress jQuery в шаблон страницы Сортировка и фильтрация данных в GridView Yii2, где столбец отсутствует в базе данных Открыть график | Опубликовать действие | Использование PHP для cURL вместо терминального PHP pthreads: Неустранимая ошибка: Class 'Thread' не найден Facebook – невозможно загрузить файл с помощью тега <input type = "file"> Как сделать 644 файлов разрешений доступными для записи на PHP?

Как сделать фотографию и отправить запрос HTTP POST с Android?

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

Что мне нужно сделать:

1) введите кнопку, открывающую приложение камеры. Я сделал это с помощью функции startResultActivity()

2) пользователь берет фотографию и возвращается в приложение с сохраненной фотографией, предпочтительно с предварительным просмотром в ImageView. Я что-то пробовал, но не могу проверить на эмулированном устройстве.

3) нажимает кнопку «отправить», и приложение отправляет изображение в HTTP POST. С «multipart», что бы это ни было. Разработчик php не хочет, чтобы я отправлял изображение в виде строки, преобразованной из массива растровых изображений.

Любая помощь для этого будет оценена по достоинству. Благодаря !

Эта ссылка должна быть более чем достаточной для нажатия, сохранения и получения пути к изображению: Capture Images

Это класс, который я написал для загрузки изображений через HTTP POST:

 public class MultipartServer { private static final String TAG = "MultipartServer"; private static String crlf = "\r\n"; private static String twoHyphens = "--"; private static String boundary = "*****"; private static String avatarPath = null; public static String postData(URL url, List<NameValuePair> nameValuePairs) throws IOException { HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setReadTimeout(10000); connection.setConnectTimeout(15000); connection.setRequestMethod("POST"); connection.setUseCaches(false); connection.setDoInput(true); connection.setDoOutput(true); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Cache-Control", "no-cache"); connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); String avatarName = null; StringBuilder query = new StringBuilder(); boolean first = true; for (NameValuePair pair : nameValuePairs) { if (first) first = false; else query.append("&"); query.append(URLEncoder.encode(pair.getName(), "UTF-8")); query.append("="); query.append(URLEncoder.encode(pair.getValue(), "UTF-8")); if ((avatarName = pair.getName()).equals("avatar")) { avatarPath = pair.getValue(); } } FileInputStream inputStream; OutputStream outputStream = connection.getOutputStream(); DataOutputStream dataOutputStream = new DataOutputStream(outputStream); dataOutputStream.writeBytes(query.toString()); // Write Avatar (if any) if(avatarName != null && avatarPath != null) { dataOutputStream.writeBytes(twoHyphens + boundary + crlf); dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + avatarName + "\";filename=\"" + new File(avatarPath).getName() + "\";" + crlf); dataOutputStream.writeBytes(crlf); /*Bitmap avatar = BitmapFactory.decodeFile(avatarPath); avatar.compress(CompressFormat.JPEG, 75, outputStream); outputStream.flush();*/ inputStream = new FileInputStream(avatarPath); byte[] data = new byte[1024]; int read; while((read = inputStream.read(data)) != -1) dataOutputStream.write(data, 0, read); inputStream.close(); dataOutputStream.writeBytes(crlf); dataOutputStream.writeBytes(twoHyphens + boundary + twoHyphens + crlf); } dataOutputStream.flush(); dataOutputStream.close(); String responseMessage = connection.getResponseMessage(); Log.d(TAG, responseMessage); InputStream in = connection.getInputStream(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in, "UTF-8")); StringBuilder response = new StringBuilder(); char []b = new char[512]; int read; while((read = bufferedReader.read(b))!=-1) { response.append(b, 0, read); } connection.disconnect(); Log.d(TAG, response.toString()); return response.toString(); } } 

Использование довольно просто: вызовите этот статический метод и пройдите путь к вашему изображению, например:

 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("avatar", imagePath)); 

и наконец:

 MultipartServer.postData(url, nameValuePairs); 

и не забудьте вызвать эту функцию в отдельном потоке или вы получите NetworkOnMainThreadException .. 🙂


Обновить

Я бы рекомендовал не изобретать колесо и использовать OkHttp . Выполните проверку на странице « Рецепты» . Отказ от ответственности : я не участвую в проекте, но мне это нравится. Благодаря команде Square.