Intereting Posts
Менеджер пакетов Android сменил TransactionTooLargeException Автозаполнение логинов в Chrome с помощью AccessibilityService Android Передать строку между двумя wifi напрямую подключенным пользователем в android, используя wifi direct? Вход в Facebook не работает больше, так как я обновил приложение Firebase до новой консоли (только) Обновление БД Firebase из фоновой службы Воздушные StageWebView Листовые карты изображения зубчатые на android Запустить Android OpenGL в фоновом режиме, как рендеринг ресурсов для приложения? Как использовать PullToRefresh в StaggeredGridView? Принуждение adjustPan в активности, содержащей ScrollView Лучшее место для addHeaderView в ListFragment Переход фрагмента Android с общим элементом Ошибка logcat для Android: ZipFileCache: init не удалось, когда открыт zip-файл – конкретное устройство? Insmod: init_module не удалось (ошибка формата Exec) Android-студия не может найти вспомогательный интерфейс для использования в классе Не удалось получить настройки из аварийных сообщений

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

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

Мне нужно сделать следующее:

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

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

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

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

Solutions Collecting From Web of "Как сделать фотографию и отправить запрос HTTP POST с Android?"

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

Это класс, который я написал для загрузки изображений через 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 .. 🙂