HttpClient post请求上传文件(java)
背景:基于高可用的编程原则,工作中的文件上传,文件一般存储在分布式文件存储系统上。分布式文件存储系统有的是购买第三方的,有的是公司自己搭建的。不管是哪一种方式,都为开发者提供了接口文档,我们根据接口文档中提供的接口,实现文件上传的功能。
一.方法参数
1.controller层中接收前端传递的文件。 (@RequestParam(value = “fileName”) MultipartFile file)
2.字符串拼接,生成唯一文件名。文中使用 /2019/2/userid/uuid 格式
二.上传方法
1. 创建 HttpClient 的实例
2. 创建某种连接方法的实例,在这里是PostMethod。在PosttMethod 的构造函数中传入待连接的地址
3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
4. 读 response
5. 释放连接。无论执行方法是否成功,都必须释放连接
三:实例
public static String doPost( byte[] fileBytes, String fileName) {//拿到fileName拼接URLStringBuffer sb=new StringBuffer();final String url = sb.append(EmailGradeTask.EMAILGRADETASKUPLOADURL).append(fileName).toString();//创建HttpClient实例CloseableHttpClient httpClient = HttpClients.createDefault();//创建post方法连接实例,在post方法中传入待连接地址HttpPost httpPost = new HttpPost(url);CloseableHttpResponse response = null;try {//设置请求参数(类似html页面中name属性)MultipartEntityBuilder entity = MultipartEntityBuilder.create();entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);entity.setCharset(Charset.forName("UTF-8"));if(fileBytes!=null) {//内容类型,用于定义网络文件的类型和网页的编码,决定文件接收方将以什么形式、什么编码读取这个文件ContentType OCTEC_STREAM = ContentType.create("application/octet-stream", Charset.forName("UTF-8"));//添加文件entity.addBinaryBody("file", fileBytes, OCTEC_STREAM, fileName);}httpPost.setEntity(entity.build());//发起请求,并返回请求响应response = httpClient.execute(httpPost);String uploadResult = EntityUtils.toString(response.getEntity(), "utf-8");System.out.println(uploadResult);return uploadResult;} catch (Exception e) {e.printStackTrace();} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}}return "文件上传错误";
}
总结:
HttpClient请求和我们在浏览器上的请求一样,一个是手动输入url,参数。一个是用程序实现,二者在功能上一样,并无区别。一般接口在浏览器上可以访问,就可以通过HttpClient请求实现。HttpClient请求分为post请求,get请求。get请求中又分为带参数的get请求和不带参数的get请求。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
