2011-10-20 14 views
7

Tôi có một Uri đến một hình ảnh được chụp hoặc chọn từ Bộ sưu tập mà tôi muốn tải lên và nén dưới dạng JPEG với chất lượng 75%. Tôi tin rằng tôi đã đạt được điều đó với đoạn mã sau:ByteArrayOutputStream đến một FileBody

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

Không phải là tôi đã giấu nó vào một ByteArrayOutputStream gọi bos tôi cần phải sau đó thêm nó vào một MultipartEntity để HTTP POST nó vào một trang web. Những gì tôi không thể tìm ra là làm thế nào để chuyển đổi ByteArrayOutputStream sang một FileBody.

Trả lời

14

Sử dụng một ByteArrayBody thay vì (có sẵn từ HttpClient 4.1), mặc dù tên của nó phải mất một tên tập tin, quá:

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

Nếu bạn đang bị mắc kẹt với HttpClient 4.0, sử dụng InputStreamBody thay vì:

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

(Cả hai lớp cũng có các nhà thầu có chuỗi loại MIME bổ sung)

2

tôi hy vọng nó có thể giúp một số, bạn có thể đề cập đến các loại tập tin như "image/jpeg" trong FileBody như sau đang

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()); 

cần phải thêm file jar httpclient-4.2.2.jar, httpmime-4.2.2.jar trong dự án của bạn .

Các vấn đề liên quan