RestTemplate实现文件上传和下载接口

0 背景

项目中需要调用第三方导入文件和导出文件接口,本文采用RestTemplate调用接口

1 上传文件

// 导入文件
RestTemplate restTemplate = new RestTemplate();
String file = "d:\\test.zip";     //或者File类型文件
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>(2);   //需要MultiValueMap数据结构
map.add("key","value");
map.add("file",new FileSystemResource(file));   //需要FileSystemResource将路径转为文件
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(map,headers);
ResponseEntity<String> response = restTemplate.postForEntity(url,request,String.class);

2 下载文件

// 导出文件
String var1 = "";   //url包含的路径参数
File file1 = restTemplate.execute(url,HttpMethod.GET,clientHttpRequest ->{
    HttpHeaders headers1 = new HttpHeaders();
    headers1.add("content-type","application/zip");
    headers1.add("content-disposition","attachment; filename=export-single.zip");   //添加头文件
},clientHttpResponse -> {
    File ret = File.createTempFile("export",".zip");  //生成导出文件的命名("export"+"随机字符"+".zip")
    StreamUtils.copy(clientHttpResponse.getBody(), new FileOutputStream(ret));
    return ret;
},var1);


// 导出文件之后到浏览器直接下载
 HttpHeaders httpHeaders = new HttpHeaders();
 httpHeaders.setContentDispositionFormData("attachment",file1.getName());
 return new ResponseEntity<Resource>(new FileSystemResource(file),httpHeaders,HttpStatus.OK);

3 将一个java对象转化为json字符串并下载

// 使用工具 fastjson
//已有对象 user
InputStream inputStream = new ByteArrayInputStream(JSONArray.toJSONString(user).getBytes());   //fastjson将java对象转化为json字符串
//需要处理异常
File ret = File.createTempFile("export",".json");  //生成导出文件的命名("export"+"随机字符"+".json")
StreamUtils.copy(inputStream , new FileOutputStream(ret));
// 浏览器直接下载
 HttpHeaders httpHeaders = new HttpHeaders();
 httpHeaders.setContentDispositionFormData("attachment",ret.getName());
 return new ResponseEntity<Resource>(new FileSystemResource(file),httpHeaders,HttpStatus.OK);

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值