java http上傳圖片的姿勢

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();
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章