spring boot feign文件下载
feign client
返回 feign.Response 对象
@RequestMapping(value = "/open/itemPlan/downDataFile", method = RequestMethod.GET)
Response downDataFile(@SpringQueryMap ProductItemPlanDownFileRequest request);
具体实现controller
按照正常文件下载方式进行编写
@RequestMapping(value = "/open/itemPlan/downDataFile", method = RequestMethod.GET)
public void downDataFile(@SpringQueryMap ProductItemPlanDownFileRequest request, HttpServletResponse httpServletResponse) {
request.setHttpServletResponse(httpServletResponse);
service.downDataFile(request);
}
文件下载Service实现
/**
* 下载附件
*
* @param request ProductItemPlanDownFileRequest
*/
@Override
public void downDataFile(ProductItemPlanDownFileRequest request) {
ProductItemPlanModel model = repository.findById(request.getId()).orElseThrow(() -> new NotFoundDaoException("数据不存在"));
Page<ProductItemPlanUserModel> page = listUserPage(model.getId(), model.getCount());
List<ProductItemPlanUserDTO> dtoList = new ArrayList<>();
if(page != null && page.getContent().size() > 0) {
page.getContent().forEach(c-> {
ProductItemPlanUserDTO dto = new ProductItemPlanUserDTO();
BeanUtils.copyProperties(c, dto);
dtoList.add(dto);
});
}
if(dtoList.size() > 0) {
String fileName = "";
try {
fileName = model.getId() + "_" + URLEncoder.encode("玩家id", "UTF-8") + ".csv";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
request.getHttpServletResponse().setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
request.getHttpServletResponse().setCharacterEncoding("utf-8");
request.getHttpServletResponse().setHeader("Content-disposition", "attachment;filename=" + fileName);
try {
EasyExcel.write(request.getHttpServletResponse().getOutputStream(), ProductItemPlanUserDTO.class).excelType(ExcelTypeEnum.CSV).sheet("玩家id").doWrite(dtoList);
} catch (IOException e) {
e.printStackTrace();
}
return;
}
return;
}
外部服务调用
/**
* 附件下载
*
* @param request 请求参数
* @return ResultVO
*/
@RequestMapping(value = "/downDataFile/{id}", method = RequestMethod.GET)
public void downDataFile(@PathVariable("id") Integer id, ProductItemPlanDownFileRequest request, HttpServletResponse response) throws IOException {
request.setId(id);
// 调取原下载服务的接口
Response feignResponse = client.downDataFile(request);
InputStream inputStream = null;
BufferedInputStream bufferedInputStream = null;
OutputStream outputStream = null;
try {
response.setContentType("application/octet-stream;charset=utf-8");
response.setHeader("Content-Disposition", feignResponse.headers().get("Content-disposition").toString().replace("[","").replace("]",""));
inputStream = feignResponse.body().asInputStream();
bufferedInputStream = new BufferedInputStream(inputStream);
outputStream = response.getOutputStream();
byte[] buffer = new byte[1024 * 1024 * 5];
int len;
while ((len = bufferedInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream!=null){
inputStream.close();
}
if (outputStream!=null){
outputStream.close();
}
if (bufferedInputStream!=null){
bufferedInputStream.close();
}
}
}