范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Springboot一行代码实现文件上传20个平台!少写代码到极致

  大家好,我是小富~
  又是做好人好事的一天,有个小可爱私下问我有没有好用的 springboot 文件上传工具,这不巧了嘛,正好我私藏了一个好东西,顺便给小伙伴们也分享一下,demo 地址放在文末了。
  文件上传在平常不过的一个功能,做后端开发的基本都会接触到,虽然不难可着实有点繁琐。数据流的开闭、读取还容易出错,尤其是在对接一些 OSS 对象存储平台,一个平台一堆SDK代码看起来乱糟糟的。
  下边给我大家推荐一个工具 Spring File Storage ,上传文件只要些许配置一行代码 搞定,开发效率杠杠的,一起看看是不是有这么流批! "
  官网:https://spring-file-storage.xuyanwu.cn
  Spring File Storage 工具几乎整合了市面上所有的OSS对象存储平台,包括本地 、FTP 、SFTP 、WebDAV 、阿里云OSS 、华为云OBS 、七牛云Kodo 、腾讯云COS 、百度云 BOS 、又拍云USS 、MinIO 、京东云 OSS 、网易数帆 NOS 等其它兼容 S3 协议的平台,只要在springboot中通过极简的方式就可以实现文件存储。
  简单配置
  下边以本地和Aliyun OSS上传为例, pom.xml 中引入必要的spring-file-storage.jar ,注意:  如果要上传文件到OSS平台,需要引入对应平台的SDK包。       cn.xuyanwu     spring-file-storage     0.5.0         com.aliyun.oss     aliyun-sdk-oss     3.10.2 
  application.yml 文件中配置些基础信息。 enable-storage :只有状态开启才会被识别到default-platform :默认的上传平台domain :生成的文件url中访问的域名base-path :存储地址thumbnail-suffix :缩略图后缀
  要是上传OSS对象存储平台,将 aliyun oss 提供的变量配置到相应的模块上即可。 spring:   #文件存储配置(本地、oss)   file-storage:     default-platform: local-1     thumbnail-suffix: ".min.jpg" #缩略图后缀     local:       - platform: local-1 # 存储平台标识         enable-storage: true #是否开启本存储(只能选一种)         enable-access: true #启用访问(线上请使用 Nginx 配置,效率更高)         domain: "http://127.0.0.1:2222" #访问域名,注意后面要和path-patterns保持一致,"/"结尾         base-path: /tmp/Pictures/ # 存储地址         path-patterns: /** #访问路径     aliyun-oss:       - platform: aliyun-oss         enable-storage: true         access-key: xxxx         secret-key: xxxx         end-point: xxx         bucket-name: firebook         domain: http://fire100.top         base-path: #云平台文件路径
  springboot 启动类中增加注解@EnableFileStorage ,显式的开启文件上传功能,到这就可以用了 @EnableFileStorage // 文件上传工具 @SpringBootApplication public class SpringbootFileStorageApplication {      public static void main(String[] args) {         SpringApplication.run(SpringbootFileStorageApplication.class, args);     } } 上传文件
  接下来在业务类中引入 FileStorageService 服务,如下只要一行代码就可以完成文件上传,是不是So easy,下载也是如法炮制。 @RestController public class FileController {      @Autowired     private FileStorageService fileStorageService;      /**      * 公众号:程序员小富      * 上传文件      */     @PostMapping(value = {"/upload"})     public Object upload(MultipartFile file) {         FileInfo upload  = fileStorageService.of(file).upload();         return upload;     } }
  我们用 postman 测试上传一张图片,看到图片已经成功传到了/tmp/Pictures 目录下,返回结果中包含了完整的访问文件的URL路径。
  不仅如此 spring-file-storage 还支持多种文件形式,URI 、URL 、String 、byte[] 、InputStream 、MultipartFile ,使开发更加灵活。
  文件上传功能,更多时候我们都是在上传图片,那就会有 动态裁剪图片 、生成缩略图 的需求,这些 spring-file-storage 都可以很容易实现。 /**  * 公众号:程序员小富  * 上传图片裁剪大小并生成一张缩略图  */ @PostMapping("/uploadThumbnail") public FileInfo uploadThumbnail(MultipartFile file) {     return fileStorageService.of(file)             .image(img -> img.size(1000,1000))  //将图片大小调整到 1000*1000             .thumbnail(th -> th.size(200,200))  //再生成一张 200*200 的缩略图             .upload(); }
  而且我们还可以动态选择上传平台,配置文件中将所有平台开启,在实际使用中自由的选择。  /**  * 公众号:程序员小富  * 上传文件到指定存储平台,成功返回文件信息  */ @PostMapping("/upload-platform") public FileInfo uploadPlatform(MultipartFile file) {     return fileStorageService.of(file)             .setPlatform("aliyun-oss")    //使用指定的存储平台             .upload(); } 下载文件
  下载文件也同样的简单,可以直接根据文件url或者文件流下载。  /**  * 公众号:程序员小富  * 下载文件  */ @PostMapping("/download") public void download(MultipartFile file) {     // 获取文件信息     FileInfo fileInfo = fileStorageService.getFileInfoByUrl("http://file.abc.com/test/a.jpg");          // 下载到文件     fileStorageService.download(fileInfo).file("C:a.jpg");      // 直接通过文件信息中的 url 下载,省去手动查询文件信息记录的过程     fileStorageService.download("http://file.abc.com/test/a.jpg").file("C:a.jpg");      // 下载缩略图     fileStorageService.downloadTh(fileInfo).file("C:th.jpg"); }
  提供了监听下载进度的功能,可以清晰明了的掌握文件的下载情况。  // 下载文件 显示进度 fileStorageService.download(fileInfo).setProgressMonitor(new ProgressListener() {     @Override     public void start() {         System.out.println("下载开始");     }      @Override     public void progress(long progressSize,long allSize) {         System.out.println("已下载 " + progressSize + " 总大小" + allSize);     }      @Override     public void finish() {         System.out.println("下载结束");     } }).file("C:a.jpg"); 文件存在、删除
  我们还可以根据文件的URL地址来判断文件是否存在、以及删除文件。  //直接通过文件信息中的 url 删除,省去手动查询文件信息记录的过程 fileStorageService.delete("http://file.abc.com/test/a.jpg"); //直接通过文件信息中的 url 判断文件是否存在,省去手动查询文件信息记录的过程 boolean exists2 = fileStorageService.exists("http://file.abc.com/test/a.jpg"); 切面
  工具还提供了每种操作的切面,可以在每个动作的前后进行干预,比如打日志或者玩点花活,实现 FileStorageAspect 类重写对应动作的xxxAround方法。 **  * 使用切面打印文件上传和删除的日志  */ @Slf4j @Component public class LogFileStorageAspect implements FileStorageAspect {      /**      * 上传,成功返回文件信息,失败返回 null      */     @Override     public FileInfo uploadAround(UploadAspectChain chain, FileInfo fileInfo, UploadPretreatment pre, FileStorage fileStorage, FileRecorder fileRecorder) {         log.info("上传文件 before -> {}",fileInfo);         fileInfo = chain.next(fileInfo,pre,fileStorage,fileRecorder);         log.info("上传文件 after -> {}",fileInfo);         return fileInfo;     } } "
  demo案例地址:https://github.com/chengxy-nds/Springboot-Notebook/tree/master/springboot-file-storage 总结
  用了这个工具确实极大的减少了上传文件所带来的代码量,提升了开发效率,使用过程中暂未发现有什么坑,好东西就是要大家分享,如果符合你的需求,犹豫什么用起来吧。
  我是小富,下期见~
  全网搜:程序员小富。
  整理了几百本各类技术电子书,有需要的同学可以,私信或者评论【666】 自取。还有想要加技术群的同学可以加我好友,和大佬侃技术、不定期内推,程序员的内点事这都有。

8星界龙3冒险家2龙神,龙王大哥索尔带上小弟呲呲收割人头金铲铲新版本隐秘之海更新后,大家玩了一阵子后研究出来的新手阵容实在是太多了,玩法多样,阵容齐出。不管怎么说,能上分的阵容都是好阵容,你们觉得呢?下面给大家推荐一款玩星界龙顶配的阵容一拳超人正义执行战栗的龙卷是谁一拳超人正义执行战栗的龙卷简介战栗的龙卷属于一拳超人正义执行游戏中的攻击角色,具有超高的群体伤害,能给玩家带来流畅的战斗过程。现在,我将从多个方面向你介绍这个角色,让你更好地了解她。拳击超人正义处决战栗的龙卷游B站独播TI11RNG表现满分,VG打了一手好牌,这是最有希望的一年提到TI11,想必不少玩家脑海里会浮现RNG的身影,要知道他们在这次的比赛中表现非常亮眼,甚至有玩家表示,今年冠军就靠他们了,无论是国内赛还是预选赛,展现出那种想要获得胜利的欲望都心越美,命越好蒋勋老师曾说,你看到了美,才会觉得世界美,而所有的美都需要你花时间与精力。是的,如果我们只是走马观花,那么到最后,我们看过的风景与人事,不过是模糊的印记而已。01hr只有用心,才看品风(原创)树叶泛黄,北风呼啸,寒气飞扬,刮着脸庞,痛在心上。秋已过去,该添衣裳,没想叶落,好把心伤点滴甜蜜,永刻心房。如今游离,不晓怎样?此时尽管有满腹的美味,全仰蜂忙!季节的交换,实属不愿几时归去?做个闲人,青山结庐,白发归隐长假,前三日还是盛夏的样子,可是4号以后,气温却暴跌二十度,一夜之间,宛如两个季节。晚上散步,发现不知不觉秋意已浓了,这样凉意袭人的深秋夜晚十分喜欢。今早出去买菜,看到路边不知第几世上最疼的病是什么病?临床上这5种疼痛,经历过的都是超人刚进科室,我就看见有一对母女急匆匆地跑进来,张女士显得有些焦虑,而她的母亲更是满头大汗,我没有着急问情况,等她们俩情绪平静我才开始询问病情。原来29岁的张女士在2年前生下一个孩子,没想到国少队踢这么好,超出所有人预期开场的一次连续的各个位置的失误,让我有点紧张。从前场直至后防线的连续失误,真的让我有点紧张。此时,转播信号戛然而止,十来分钟的等待,时间好像过得很慢。信号来了,好像也没有获得大多优湖人战森林狼三巨头缺席,浓眉又受伤!哈姆练兵,2人值得重用前言本以为与太阳的比赛可以稳稳拿下,在领先三节之后,湖人还是在末节崩盘。几乎领先两位数的情况下,被太阳一波小高潮带走。当然,和上场失利情况一样,湖人主帅哈姆并没有为了胜利而让主力球大傻春,你要干嘛追梦在训练中打了普尔,可谓意外又不意外的新闻意外的是,竟然有人在训练中打队友不意外的是,打人者是合同年的追梦?噢,那没事了。这件事最妙的是,它出现的时间点。近期有两个关键事件,一个欧冠皇马21矿工取得三连胜!罗德里戈维尼修斯各入一球北京时间10月6日凌晨3点,欧冠小组赛第3轮,皇家马德里主场对阵顿涅茨克矿工。前两轮,皇马30胜凯尔特人,20胜莱比锡,取得两连胜。矿工41莱比锡,11凯尔特人,排在小组第二。开场
上了年纪活得别太累,拥有一个好的身体,比家财万贯还要值钱一辈子不长,一晃人就到了中年,不服老是不行的,别以为自己真的无所不能,年龄越大最好还是活的自私一点,要为自己而活,凡事适可而止,别活的太累,俗话说钱乃身外之物,活不带来,死不带去,俄外交部回应朔尔茨涉俄德合作言论俄不会请求恢复两国经济关系环球网报道俄外交部称俄罗斯不会请求德国恢复经济关系据塔斯社今日俄罗斯电视台网站(RT)等多家俄媒报道,俄罗斯外交部当地时间14日发表声明,对德国总理朔尔茨近日发表的涉及两国经济合作前中超球员猝然离世,年仅37岁,昔日队友他身体不太好,之前已经很瘦削了老王走了。12月12日深夜,在微信上看到老友王若吉去世的消息,刘宇驰整个人都蒙了。一时间,他无法接受这个冰冷的事实。王若吉(后排右六)刘宇驰(后排右三)王若吉,前沈阳金德队队员,曾每天喝咖啡和每天喝茶,长期下去身体会有什么不同吗?每天喝咖啡和每天喝茶,10年后身体会有什么不同吗?你喜欢喝茶还是喜欢喝咖啡?茶和咖啡是时下上班族最喜欢的饮品。很多年轻的白领喜欢喝咖啡的多,特别是像北上广深喝咖啡的更多。而茶则是作萝卜是胃病的加速器?医生想肠胃健康,这5种食物可以多吃冬吃萝卜夏吃姜,这句流行语想必已是家喻户晓了吧。显然这也成了大家的饮食习惯,虽然现在大棚种植非常的便利,但是萝卜依旧是冬季食物的主流。而人体的肠胃是一个非常脆弱的器官,患病率极高,和爱人孩子的关系都很好了,为什么还不幸福?前言中国人,如果内心怨恨父母,要么觉得自己不能让父母开心高兴满意,而烦厌怨恨着自己怕自己不好要么烦厌怨恨着别人,可能是父母爱人孩子,可能是领导同事朋友,还可能是社会国家要别人满足自乳腺结节能不能吃橘子?医生保护乳腺,建议少碰这6物现在的生活节奏越来越快,很多女性长期压力过大,会导致身体出现一些问题,其中就有很多女性被查出乳腺结节。患上乳腺结节后,有的女性在月经期间症状比较明显,有的偶尔会出现隐隐作痛,用手摸1951年,为鬼子服务51年的老汉奸被枪决,临死大喊我这辈子值了1951年,解放军战士将一名81岁的汉奸押入刑场,很多群众都闻讯赶来观看,不知道这是怎么一回事。有人非常不解地问道他都这么大的年纪了,怎么还被杀头啊?至于这样对待一个老人吗?知情的最不上火的补气之法!千年名方生脉饮,家中常备,补气养阴又提神年末事多,小林开始了他的加班之路,连续几天晚睡早起,让他感觉昏昏沉沉口干舌燥往常走习惯的楼梯也让他气喘吁吁。手上身上老是容易出汗,心脏也有些心悸的感觉,脸色也总是煞白煞白的。他上网中医对于发热的认识中医学认为发热是邪气与正气相抗争的反应,最早记载于黄帝内经素问,谓之身热,此后历代医家均有论述,证治经验非常丰富。辨别要领明时令发病的季节与气候状态。判病势缓起或骤发,变化态势。知有些药真的不能混着吃,一不小心就会致命!!!喝了连花清瘟一般不可以喝藿香正气水,主要是因为两者适应证不同,具体要根据身体症状来用药,不能滥用药物。连花清瘟可以帮助清瘟解毒,具有宣肺泄热的功效,一般可用于治疗流行性感冒,比如热