1.读取jar包中resource下文件

正常我们在本地debug代码的时候,用File的方式,或者其他ResourceUtil的方式,都可以取到resource下的文件,但是打成jar包发到线上,就会报取不到文件

解决办法:

PathMatchingResourcePatternResolver

注意路径必须带

classpath*:

如果不带classpath*:   那么进行空判断时,就算这个文件不存在,ObjectUtils.isEmpty也不会返回true

以下为正确示例代码

    public  byte[] readFile(String cityId) throws Exception {InputStream resourceAsStream = null;ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource[] resources = resolver.getResources("classpath*:"+cityId+"_zip_base.txt");//如果指定城市对应的配置文件为空  那就取原型默认的if(ObjectUtils.isEmpty(resources)){resources = resolver.getResources("classpath*:00000_zip_base.txt");}if(!ObjectUtils.isEmpty(resources)){resourceAsStream = resources[0].getInputStream();ByteArrayOutputStream outputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024*4];int n = 0;while (-1 != (n = resourceAsStream.read(buffer))) {outputStream.write(buffer, 0, n);}return outputStream.toByteArray();}else{throw new PlatRuntimeException(ErrorCodeConstant.downloadFileError, null, "文件读取出错");}}

补充

Thread.currentThread().getContextClassLoader("资源文件名")也可以加载资源文件 ,

参考这个博客,可以通过static代码块,在初始化时就把资源文件加载进来  CSDN

2.如何在本地测试是否能读到jar包中的文件

我开始一遍一遍的重启线上,但是这势必会影响别人使用

然后本地install一个jar包,java -jar自己调试

还有一个坑,本地jar包好用但是线上还是不好用,clean一下

3.入口和出口参数格式

@Consumes设置入口参数格式
@Produces设置出口参数格式
@Consumes("application/json;charset=UTF-8")
@Produces("application/octet-stream")

org.springframework.http.MediaType可以看到所有类型的格式

在spring的http包下,截图只是一部分

其实,这不是sofa特有的,点开@RequestMapping注解,也有 consumes属性和produces属性

    @RequestMapping(consumes={"multipart/form-data",""},produces={"application/json;charset=UTF-8"})Map<String, Object> importZip(@RequestParam("file") MultipartFormDataInput file);

数组类型属性用大括号{}包起来,多个时候大括号中用逗号,隔开 

4.返回类型

Response

在javax.ws.rs.core包下

readFile就是上边贴的第一段代码

 public Response downloadZip(String cityId) {byte[] bytes = null;try {bytes = zipToBase64Util.readFile(cityId);} catch (Exception e) {throw new PlatRuntimeException(ErrorCodeConstant.downloadFileError, null, "文件读取出错");}String fileName = "documentation.rar";Response.ResponseBuilder response = Response.ok(bytes);response.header("Content-Disposition", "attachment; filename=\""+fileName+"\"");return response.build();}

5.Content-Disposition

Response.setStatus()//设置状态码

Response.ok 这是状态码为200

Response.ok我存base64字节是好用的   存stream测试无法返回报类型不符合  没有测试存FIle

content-disposition:服务器告诉客户端以什么方式打开响应体数据值In-line:默认值,在当前页面内打开Attachment;filename=xxx;以附件形式打开响应体,文件下载

如果filename文件名带中文,需要进行utf-8编码

6.请求http类型

想要浏览器直接下载,用的Get请求

参数直接放路径上

    @GET@Produces("application/octet-stream")@Path("/downloadZip/{cityId}")Response downloadZip(@PathParam("cityId") String cityId);

7.追更

正常的RequestMapping接口下载

其实万变不离其中,都是要把文件流或者二进制字节码放在response中,只是RequestMapping是放在HttpServletResponse的response中

    public void fileDownLoad(FileDownLoadRequest fileDownLoadRequest, HttpServletResponse response) {FileDownLoad fileDownLoad = fileDownRepository.fileDownLoad(FileDownLoad.builder().fileId(fileDownLoadRequest.getFileId()).build());OutputStream out = null;try {response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileDownLoad.getFileName().getBytes()));out = response.getOutputStream();out.write(fileDownLoad.getByteInput());out.flush();} catch (IOException e) {e.printStackTrace();}}

sofa接口下载文件相关推荐

  1. 2021-09-07-OSB学习(接口下载文件--流)

    OSB学习(接口下载文件[流的形式]) 什么是使用流文件传输 1.我们要干什么 2.接口开发 2.1.控制台通过执行PL显示流文件信息 2.1.1.创建基本的目录结构 2.1.2.打开项目,然后创建B ...

  2. Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。

    URL文件地址下载方法 一.正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性 //文件下载downFile() {if ('download' in document. ...

  3. Python接口下载文件

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : shenqiang''' 注意:定义类的时候,内部方法之间的互调 步骤: 1.按照流 ...

  4. swagger knife4j 解决接口下载文件响应乱码问题

    ** 在@ApiOperation注解中加上produces = "application/octet-stream" ** 添加效果如图所示: @ApiOperation(val ...

  5. fegin接口下载文件

    服务提供端这里结合的是minio文件服务器: controller,这里一定是void,不要指定返回内容 @RequestMapping("/file") @RestControl ...

  6. java restTemplate请求get接口下载文件

    restTemplate调用模块进行文件下载: 调用的方法是void方法,所以需要用restTemplate.exchange方法进行调用 调用过程: 被调用的目标接口:@GetMapping(val ...

  7. 使用restTemplate请求get接口下载文件

    引入的是这个包 import org.springframework.web.client.RestTemplate; // 通过接口,下载附件,转换成byte数组:然后再把这些字节流传递给XX系统的 ...

  8. java使用feign接口下载文件

    1.feign接口定义(注意:Response 导包) import feign.Response; /*** 导出定义*/@PostMapping(value="/xx/export&qu ...

  9. swagger接口下载文件

    注意!!!!!!!!!!!!swagger下载的文件是损坏的!!!!!!!!!! 所以在浏览器直接输入一下路径就能下载了

  10. 通过Java WebService接口从服务端下载文件

    一. 前言 本文讲述如何通过webservice接口从服务器下载文件到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以:):在这种情况下搭建一个FTP服务器增加了系统部署的复杂度和 ...

最新文章

  1. c# 使用线程方式实现消息订阅
  2. C++中的Lock简单用法
  3. 关于 form表单 嵌套问题的解决方案
  4. pysam - 多种格式基因组数据(sam/bam/vcf/bcf/cram/…)读写与处理模块(python)--转载...
  5. (计算机组成原理)第二章数据的表示和运算-第三节1:浮点数的表示
  6. css设置自适应屏幕高度
  7. springboot-20-全局异常处理
  8. django基础入门(3)django中模板
  9. delphi 2010 mysql_Delphi2010 DBExpress+MySQL 程序的打包
  10. fedora linux五笔输入法,教你在Fedora 14 下安装五笔输入法
  11. 中图分类法----S 农业科学
  12. 济南市公安局交警支队辅警信息管理系统
  13. webgl天空盒边界缝隙_基于webGL技术的3D库ThingJS支持天空盒技术实现
  14. 华为OD机试(A、B卷)、机考,200分的题目整理如下,冲满分必备
  15. C# dll注入(指定进程注入指定dll)
  16. Sqoop常用命令回顾
  17. 【今日CV 计算机视觉论文速览 第128期】Mon, 10 Jun 2019
  18. Linux命令——groups
  19. 中英文标点符号在全角和半角之下的区分
  20. 2012年50款最佳iPhone应用

热门文章

  1. 为Ribbon Client自定义配置
  2. 论文阅读--异常检测中实时大数据处理的研究挑战
  3. python推荐书豆瓣_基于Python的豆瓣图书评论数据获取与可视化分析
  4. 动作频频,BAT欲瓜分10万亿互联网医疗市场蛋糕?
  5. 20 年来,从微软亚洲研究院走出了中国互联网的半壁江山
  6. angular的生命周期
  7. 计算机专业术语,收藏用
  8. java和mysql实现点餐功能_java+mysql餐馆点餐系统的设计与开发
  9. 计算机配置音箱便宜,5款性价比高的电脑小音箱推荐(每一款音质都相当ok
  10. Tushare财经数据调取方法(行情数据)