Intereting Posts
Android: Jumbo Mode vs Multidex Почему `hasEnrolledFingerprints` дает ошибку, что она требует разрешения только в моем фрагменте, но не в действии в примере Google? Модуль библиотеки Android Studio Java и модуль библиотеки Android Как начать другое действие с некоторой задержкой после нажатия кнопки в android? Как вы указываете в AndroidManifest.xml, что вы хотите запретить установку на устройствах размером менее 4,7-дюймового устройства? Библиотека AndroidFillableLoaders от JorgeCastilloPrz – проблема SVGPath «AnalyticsReceiver не зарегистрирован или отключен». Проверить командную строку инструментов разработчика Android Выровнять кнопки AlertDialog до центра Android-переменные в strings.xml Underflow в восстановлении в android 4.3 Как реализовать распознавание жестов при износе android Android MVP: что такое Interactor? Как запросить значение столбца, заданного как указатель на другую таблицу в Parse Использовать startActivityForResult из неактивных

ByteArrayOutputStream для FileBody

У меня есть Uri для изображения, которое было либо принято, либо выбрано из Галереи, которое я хочу загрузить и сжать как JPEG с качеством 75%. Я считаю, что я достиг этого с помощью следующего кода:

ByteArrayOutputStream bos = new ByteArrayOutputStream(); Bitmap bm = BitmapFactory.decodeFile(imageUri.getPath()); bm.compress(CompressFormat.JPEG, 60, bos); 

Не то, чтобы я заправил его в ByteArrayOutputStream называемый bos мне нужно добавить его в MultipartEntity , чтобы HTTP POST его на веб-сайт. Я не могу понять, как преобразовать ByteArrayOutputStream в FileBody.

Solutions Collecting From Web of "ByteArrayOutputStream для FileBody"

Вместо этого используйте ByteArrayBody (доступный с HTTPClient 4.1), несмотря на его имя, также требуется имя файла:

 ContentBody mimePart = new ByteArrayBody(bos.toByteArray(), "filename"); 

Если вы застряли в HTTPClient 4.0, вместо этого используйте InputStreamBody :

 InputStream in = new ByteArrayInputStream(bos.toByteArray()); ContentBody mimePart = new InputStreamBody(in, "filename") 

(Оба класса также имеют конструкторы, которые используют дополнительную строку типа MIME)

Я надеюсь, что это может помочь кому-то, вы можете указать тип файла как «image / jpeg» в FileBody, как показано ниже.

 HttpClient httpClient = new DefaultHttpClient(); HttpPost postRequest = new HttpPost( "url"); MultipartEntity reqEntity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); reqEntity.addPart("name", new StringBody(name)); reqEntity.addPart("password", new StringBody(pass)); File file=new File("/mnt/sdcard/4.jpg"); ContentBody cbFile = new FileBody(file, "image/jpeg"); reqEntity.addPart("file", cbFile); postRequest.setEntity(reqEntity); HttpResponse response = httpClient.execute(postRequest); BufferedReader reader = new BufferedReader( new InputStreamReader( response.getEntity().getContent(), "UTF-8")); String sResponse; StringBuilder s = new StringBuilder(); while ((sResponse = reader.readLine()) != null) { s = s.append(sResponse); } Log.e("Response for POst", s.toString()); 

Необходимо добавить файлы jar httpclient-4.2.2.jar, httpmime-4.2.2.jar в свой проект.