1:通過 apache 的 HttpClient
public static String up00(String url, byte[] bytes) throws Exception {
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
//multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
multipartEntityBuilder.addBinaryBody("image_file", bytes);
org.apache.http.HttpEntity httpEntity = multipartEntityBuilder.build();
return simplePost(url, httpEntity);
}
public static String simplePost(String url, org.apache.http.HttpEntity entity) throws Exception{
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
CloseableHttpResponse response = null;
try {
if(entity!=null) {
httpPost.setEntity(entity);
}
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(6000)
.setConnectTimeout(10000)
.build();
httpPost.setConfig(requestConfig);
response = httpClient.execute(httpPost);
org.apache.http.HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
return EntityUtils.toString(responseEntity);
}
}finally {
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
}
return null;
}
```
**2:通過Spring的restTemplate**
public static void upload0(String uploadUrl,String name,byte[] data) throws Exception{
MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>();
map.add("image_file", data);
map.add("filename", "aa");
String result = restTemplate.postForObject(uploadUrl, map, String.class);
System.out.println(result);
}
static RestTemplate restTemplate=null;
static {
restTemplate = restTemplate();
}
static RestTemplate restTemplate() {
return new RestTemplate(httpRequestFactory());
}
@Bean
static public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}
@Bean
static public HttpClient httpClient() {
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory()).build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
// 設置整個連接池最大連接數 根據自己的場景決定
connectionManager.setMaxTotal(60000);
// 路由是對maxTotal的細分
connectionManager.setDefaultMaxPerRoute(50000);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000) // 服務器返回數據(response)的時間,超過該時間拋出read
// timeout
.setConnectTimeout(2000)// 連接上服務器(握手成功)的時間,超出該時間拋出connect timeout
.setConnectionRequestTimeout(4000)// 從連接池中獲取連接的超時時間,超過該時間未拿到可用連接,會拋出org.apache.http.conn.ConnectionPoolTimeoutException:
// Timeout waiting for connection from pool
.build();
return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager)
.build();
}