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);
}
}
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);
}
}
相关文章推荐
- HttpClient 4.5版本实现文件上传下载以及常用post、get请求
- java httpclient文件上传,springmvc作为服务器端接收文件,以及上传中文件名乱码的解决方法
- 【转】asp.net(c#)使用HttpWebRequest附加携带请求参数以post方式模拟上传大文件(以图片为例)到Web服务器端
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件
- 使用HttpURlConnection 发送POST请求上传文件(带参数)
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件(二)
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件(二)
- HttpClient上传文件以及传输数据
- HttpClient调用接口传递文件参数
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件
- Android 发送HTTP GET POST 请求以及通过 MultipartEntityBuilder 上传文件
- springMVC + hadoop + httpclient 文件上传请求直接写入hdfs
- 基于HttpClient访问服务器以及上传文件
- android使用AsyncHttpClient上传图片以及参数到服务器
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
- 使用httpClient MultipartRequestEntity文件上传解析文件和普通表单参数
- android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
- HttpClient通过post上传文件和提交参数