2016-07-26 3 views
1

Я хочу загрузить сразу несколько изображений. , поэтому я нашел «MultipartEntityBuilder», но он не работает.Как использовать Multipart в Android?

Это мой источник ...

public void executeMultipartPost() throws Exception { 
    try { 

     MultipartEntityBuilder builder = MultipartEntityBuilder.create(); 
     builder.setCharset(Charset.forName("UTF-8")); 
     builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream); 
     byteArray = byteArrayOutputStream.toByteArray(); 


     builder.addTextBody("file1", byteArray.toString()); 
     builder.addTextBody("file2", byteArray2.toString()); 

     // send 
     InputStream inputStream = null; 
     HttpClient httpClient = AndroidHttpClient.newInstance("Android"); 
     HttpPost httpPost = new HttpPost(UPLOAD_URL); 
     httpPost.setEntity(builder.build()); 
     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     inputStream = httpEntity.getContent(); 

     // response 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); 
     StringBuilder stringBuilder = new StringBuilder(); 
     String line = null; 
     while ((line = bufferedReader.readLine()) != null) { 
      stringBuilder.append(line + "\n"); 
     } 
     inputStream.close(); 

     // result 
     String result = stringBuilder.toString(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

Когда отладка "httpPost.setEntity (builder.build()) эта линия ошибка.

и нет «Вызванный ~», но процесс: NoSuchFiledError в LogCat ...

, но я думаю, что я сделал изображение в растровое затем отправить его на FTP. что не так..? Благодарю.

ответ

1

Ваш код может избавиться от устаревшего кода MultipartEntity и использовать MultipartEntityBuilder. Однако конкретная проблема связана с тем, что основные Android-библиотеки конфликтуют с недавно добавленными. Также есть доступные хранилища maven. Вы можете попробовать следующий код в файл ниже:

build.grade (Module:app) 
compile('org.apache.httpcomponents:httpmime:4.3.6') { 
    exclude module: 'httpclient' 
} 

compile 'org.apache.httpcomponents:httpclient-android:4.3.5' 

Getting NoSuchFieldError INSTANCE org/apache/http/message/BasicHeaderValueParser

+0

гм ... вы имеете в виду версия совсем другая? Я перейду к 4.3.6. но я использую eclipse-android ... так что мне нужна банка. Я попробую!! Благодарю. – Adrian

+0

да, я знаю, в основном это касается пользователей eclipse :) –

+0

hm ... Я меняю http * ??? – Adrian

1

общественности статической загрузки UploadResult (окончательный Bitmap растровый, окончательный контекст Context) {

StringBuilder builder = new StringBuilder(); 
    UploadResult result = null; 
    try { 
     URL uri = new URL(context.getString(R.string.base_url) + context.getString(R.string.api_upload)); 
     HttpURLConnection con = (HttpURLConnection) uri.openConnection(); 
     con.setConnectTimeout(20000); 
     con.setReadTimeout(20000); 
     con.setRequestMethod("POST"); 
     con.setDoOutput(true); 
     con.setDoInput(true); 

     con.setRequestProperty("Charset", "UTF-8"); 
     con.setRequestProperty("connection", "keep-alive"); 
     String BOUNDARY = UUID.randomUUID().toString(); 
     String LINE_END = "\r\n"; 
     String PREFIX = "--"; 
     con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY); 

     OutputStream os = con.getOutputStream(); 

     String sb = PREFIX + 
       BOUNDARY + 
       LINE_END + 
       "Content-Disposition: form-data; name=\"file\"; filename=\"tmp.png\"" + LINE_END + 
       "Content-Type: application/octet-stream; charset=UTF-8" + LINE_END + 
       LINE_END; 

     os.write(sb.getBytes()); 
     os.write(Util.Bitmap2Byte(bitmap)); 

     os.write(LINE_END.getBytes()); 
     byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END).getBytes(); 
     os.write(end_data); 

     os.flush(); 
     os.close(); 
     int code = con.getResponseCode(); 
     System.out.println("code:" + code); 
     BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8")); 

     if (code == 200) { 
      String ch; 
      while (null != (ch = br.readLine())) { 
       builder.append(ch); 
      } 
     } 
     con.disconnect(); 

     String response = builder.toString(); 
     if (!response.isEmpty()) { 
      result = JSON.parseObject(response, UploadResult.class); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return result; 
} 
+0

Что такое UploadResult Class? Я не могу импортировать этот класс ... – Adrian

+0

это ответ http, вы можете изменить его на String, если ответ json или xml, UploadResult является объектом ответа –

+0

JSON - fastjson, вы также можете изменить его на gson –

Смежные вопросы