ByteArrayOutputStream в FileBody - PullRequest
       21

ByteArrayOutputStream в FileBody

7 голосов
/ 20 октября 2011

У меня есть 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.

Ответы [ 2 ]

14 голосов
/ 20 октября 2011

Вместо этого используйте 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)

2 голосов
/ 18 декабря 2012

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

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 в ваш проект.

...