Springboot 一行代碼實現文件上傳 20個平臺!少寫代碼到極致( 二 )


Springboot 一行代碼實現文件上傳 20個平臺!少寫代碼到極致

文章插圖
文件上傳功能,更多時候我們都是在上傳圖片,那就會有動態裁剪圖片生成縮略圖的需求,這些 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() {@Overridepublic void start() {System.out.println("下載開始");}@Overridepublic void progress(long progressSize,long allSize) {System.out.println("已下載 " + progressSize + " 總大小" + allSize);}@Overridepublic 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@Componentpublic class LogFileStorageAspect implements FileStorageAspect {/*** 上傳,成功返回文件信息,失敗返回 null*/@Overridepublic 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
總結用了這個工具確實極大的減少了上傳文件所帶來的代碼量,提升了開發效率,使用過程中暫未發現有什么坑,好東西就是要大家分享,如果符合你的需求,猶豫什么用起來吧 。
技術交流,公眾號:程序員小富
【Springboot 一行代碼實現文件上傳 20個平臺!少寫代碼到極致】

推薦閱讀