您的位置:首页 > 理论基础 > 计算机网络

HttpClient请求接口上传文件以及参数

2017-09-14 15:55 447 查看
public class HttpClient {

private static String charset = "UTF-8";

// 此方法是POST请求上传的参数中包含本地图片信息File类型
public String request(String url, HashMap<String, Object> fields, HashMap<String, File> files) throws Exception {

CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String result = null;
// HttpClient请求的相关设置,可以不用配置,用默认的参数,这里设置连接和超时时长(毫秒)
RequestConfig config = RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build();

try {
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
addFiles(entityBuilder, files);
addFields(entityBuilder, fields);

HttpPost httpPost = new HttpPost(url);
HttpEntity reqEntity = entityBuilder.build();
httpPost.setEntity(reqEntity);
httpPost.setConfig(config);
// 执行网络请求并返回结果
response = httpClient.execute(httpPost);
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
result = streamToString(resEntity.getContent(), charset);
}
EntityUtils.consume(resEntity);
} finally {
response.close();
httpClient.close();
}
// 得到的是JSON类型的数据需要第三方解析JSON的jar包来解析
return result;
}

private void addFiles(MultipartEntityBuilder entityBuilder, HashMap<String, File> files) {

if (files == null) {
return;
}
for (String name : files.keySet()) {
File file = files.get(name);
FileBody fileBody = new FileBody(file);
entityBuilder.addPart(name, fileBody);
}

}

private void ad
4000
dFields(MultipartEntityBuilder entityBuilder, HashMap<String, Object> fields) {

for (String name : fields.keySet()) {
String value = fields.get(name).toString();
StringBody StringBody = new StringBody(value, ContentType.TEXT_PLAIN);
entityBuilder.addPart(name, StringBody);
}
}

// 此方法是把传进的字节流转化为相应的字符串并返回,此方法一般在网络请求中用到
private String streamToString(InputStream inputStream, String charset) throws Exception {

StringBuilder stringBuilder = new StringBuilder();
try (InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset)) {
try (BufferedReader reader = new BufferedReader(inputStreamReader)) {
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line).append("\r\n");
}
}
}
return stringBuilder.toString();
}

public static void main(String[] args) throws Exception {

HttpClient httpClient = new HttpClient();
String url = "http://。。。";
HashMap<String, Object> fields = new HashMap<String, Object>();
fields.put("token", "zdgfhgcnf");
fields.put("image_type", "scfzdzfds");
File file = new File("images/email.png");
HashMap<String, File> files = new HashMap<String, File>();
files.put("file", file);

String result = httpClient.request(url, fields, files);
System.out.println(result);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐