作者:谢乔云文辰雅婷 | 来源:互联网 | 2023-05-19 16:32
HttpClient有两种形式,一种是org.apache.http下的,一种是org.apache.commons.httpclient.HttpClient。文件上传可以使用两种方式实现,一种是P
HttpClient有两种形式,一种是org.apache.http下的,一种是org.apache.commons.httpclient.HttpClient。
文件上传可以使用两种方式实现,一种是PostMethod方式,一种是HttpPost方式。两者的处理大同小异。PostMethod是使用FileBody将文件包装流包装起来,HttpPost是使用FilePart将文件流包装起来。在传递文件流给服务端的时候,都可以同时传递其他的参数。
PostMethod方式
将文件封装到FilePart 中,放入Part数组 ,同时,其他参数可以放入StringPart 中,这里没有写,只是单纯的将参数以setParameter 的方式进行设置。此处的HttpClient是org.apache.commons.httpclient.HttpClient。
public void upload(String localFile){ File file = new File(localFile); PostMethod filePost = new PostMethod(URL_STR); HttpClient client = new HttpClient(); try { // 通过以下方法可以模拟页面参数提交 filePost.setParameter("userName", userName); filePost.setParameter("passwd", passwd); Part[] parts = { new FilePart(file.getName(), file) }; filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams())); client.getHttpConnectionManager().getParams().setConnectionTimeout(5000); int status = client.executeMethod(filePost); if (status == HttpStatus.SC_OK) { System.out.println("上传成功"); } else { System.out.println("上传失败"); } } catch (Exception ex) { ex.printStackTrace(); } finally { filePost.releaseConnection(); } }
HttpPost方式
这种方式,与上面类似,只不过变成了FileBody 。上面的Part数组在这里对应HttpEntity 。此处的HttpClient是org.apache.http.client.methods下的。
public void upload(String localFile){ CloseableHttpClient httpClient = null; CloseableHttpResponse respOnse= null; try { httpClient = HttpClients.createDefault(); // 把一个普通参数和文件上传给下面这个地址 是一个servlet HttpPost httpPost = new HttpPost(URL_STR); // 把文件转换成流对象FileBody FileBody bin = new FileBody(new File(localFile)); StringBody userName = new StringBody("Scott", ContentType.create( "text/plain", Consts.UTF_8)); StringBody password = new StringBody("123456", ContentType.create( "text/plain", Consts.UTF_8)); HttpEntity reqEntity = MultipartEntityBuilder.create() // 相当于 .addPart("file", bin) // 相当于 .addPart("userName", userName) .addPart("pass", password) .build(); httpPost.setEntity(reqEntity); // 发起请求 并返回请求的响应 respOnse= httpClient.execute(httpPost); System.out.println("The response value of token:" + response.getFirstHeader("token")); // 获取响应对象 HttpEntity resEntity = response.getEntity(); if (resEntity != null) { // 打印响应长度 System.out.println("Response content length: " + resEntity.getContentLength()); // 打印响应内容 System.out.println(EntityUtils.toString(resEntity, Charset.forName("UTF-8"))); } // 销毁 EntityUtils.consume(resEntity); }catch (Exception e){ e.printStackTrace(); }finally { try { if(response != null){ response.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(httpClient != null){ httpClient.close(); } } catch (IOException e) { e.printStackTrace(); } } }
转载来源:http://www.linuxidc.com/Linux/2014-07/104303.htm