由于API级别22 android弃用了HTTP客户端和多部件构建器。我想通过使用MultipartEntityBuilder和HttpURLConnection在单个请求中在服务器上发送一些JSON对象和图像。
答案 0 :(得分:1)
用于Android的Apache HttpClient 4.3端口旨在解决这个问题 通过提供与谷歌兼容的官方版本的情况 机器人。
鉴于从Android API 23开始,谷歌的HttpClient分叉已经存在 删除此项目已经停止。
想要在Android上继续使用Apache HttpClient的用户 建议考虑
针对Android API 22及更早版本的适用于Android的Apache HttpClient 4.3端口
dependencies {
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}
适用于Android的Apache HttpClient软件包,由Marek Sebera在针对Android API 23及更新版本时维护
dependencies {
compile group: 'cz.msebera.android' , name: 'httpclient', version: '4.4.1.1'
}
取自 Apache官方网站:Apache HttpClient for Android
注意:您不必使用useLibrary 'org.apache.http.legacy'
语句,该语句是针对未从Android提供的HttpClient类迁移的项目引入的。进一步explanation。
我已使用Volley 实施了{{3>} MultipartRequest(文件上传)。
答案 1 :(得分:1)
我已使用下面的代码,使用Multipart Entity Builder和HttpOpenUrl连接成功发送了图像文件和JSON数据。
String boundary = "*************";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
FileBody fileBody = new FileBody(new File(image));//pass your image path to make a file
builder.addPart("profile_image", fileBody);
builder.addPart("data", new StringBody(jsonObject.toString(), ContentType.TEXT_PLAIN));//pass our jsonObject here
HttpEntity entity = builder.build();
URL url = null;
try {
url = new URL("write your url here");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setConnectTimeout(10000);
urlConnection.setReadTimeout(10000);
urlConnection.setDoOutput(true);
urlConnection.setRequestMethod("POST");
urlConnection.addRequestProperty("Content-length", entity.getContentLength() + "");
urlConnection.addRequestProperty(entity.getContentType().getName(), entity.getContentType().getValue());
OutputStream os = urlConnection.getOutputStream();
entity.writeTo(urlConnection.getOutputStream());
os.close();
urlConnection.connect();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String s = "";
StringBuilder stringBuilder = new StringBuilder("");
while ((s = bufferedReader.readLine()) != null) {
stringBuilder.append(s);
}
serverResponseMessage = stringBuilder.toString();
答案 2 :(得分:0)
与我的评论一起,由于Apache22对来自API22的librabry的弃用,建议您使用HttpUrlConnection,OkHttp ...而不是。
您应该阅读更多Apache HTTP Client Removal
有关多部分请求的OkHttp示例,请参阅its GitHub documentation here
希望这有帮助!