下载功能应该是比较常见的功能了,每个项目里都会有,简单的下载不难但是代码多也麻烦,对于复杂的下载代码更多更是麻烦。
如果我说现在只需要一个注解就能帮你下载任意的对象,是不是觉得非常的方便
@Download(source = "classpath:/download/test.txt")
@GetMapping("/classpath")
public void classpath() { } @Download
@GetMapping("/file")
public File file() { returnnew File("/file/csdn/test.txt");
} @Download
@GetMapping("/http")
public String http() { return"http://localhost:1010/test/csdn.jpg";
}
对于简单的下载,是不是简单多了?那么对于复杂的下载考虑的问题多,代码实现也相对复杂,那么使用这个注解会更加的凸显便利!
需求:我们有一个平台是管理生活用品的,然后每个生活用品都会有一个生活用品图片,用一个字段存储的 http 地址
现在需要导出所有生活用品 图片的压缩包,图片名称需要用生活用品名称加 .png 后缀,需求上来说并不难,但是着实有点麻烦
- 首先我需要将生活用品的列表查出来
- 然后使用生活用品图片的地址下载图片并写到本地缓存文件
- 在下载之前需要先判断是否已经存在缓存
- 下载时需要并发下载提升性能等所有图片下载结束后
- 再生成一个压缩文件
- 然后再操作输入输出流写到响应中
实现的代码有200行,挺麻烦的。。。
文件路径是一个文件还是一个目录?字符串文本需要先写入一个文本文件中?http资源如何下载到本地?多个文件怎么压缩?最后怎么写到响应中?我才不想花时间管这些
@Download(filename = "生活用品.zip")
@GetMapping("/download")
public List<Life> download() { return lifeService.all();
} publicclass Life { //生活用品名称 private String name; //生活用品图片地址 //注解表示该http地址是需要下载的数据 @SourceObjectprivate String url; //注解表示文件名称 @SourceNamepublic String getLifeName() { return name + ".png"; } //省略其他属性方法
}
通过在 Life的字段上标注某些注解,省时省心省力又优雅!