电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

SpringBoot實現單文件與多文件上傳

瀏覽:5日期:2023-03-09 16:54:17
目錄一、公共文件存儲代碼1.FileUploadUtils.java2.FileUtils.java3.MimeTypeUtils.java4.FileException.java5.FileNameLengthLimitExceededException.java6.FileSizeLimitExceededException.java7.InvalidExtensionException.java二、單文件上傳代碼三、多文件上傳代碼一、公共文件存儲代碼1.FileUploadUtils.java

package com.springcloud.blog.admin.util.file;/** * @description: 文件上傳工具類 * @author: youcong * @time: 2020/9/28 11:34 */import com.springcloud.blog.admin.exception.file.FileNameLengthLimitExceededException;import com.springcloud.blog.admin.exception.file.FileSizeLimitExceededException;import com.springcloud.blog.admin.exception.file.InvalidExtensionException;import com.springcloud.blog.admin.util.DateUtils;import com.springcloud.blog.admin.util.IdUtils;import com.springcloud.blog.admin.util.StringUtils;import org.apache.commons.fileupload.FileUploadBase;import org.apache.commons.io.FilenameUtils;import org.springframework.web.multipart.MultipartFile;import java.io.File;import java.io.IOException;public class FileUploadUtils { /** * 默認大小 50M */ public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024; /** * 默認的文件名最大長度 100 */ public static final int DEFAULT_FILE_NAME_LENGTH = 100; /** * 默認上傳的地址 */ private static String defaultBaseDir = 'D://test//'; /** * 資源映射路徑 前綴 */ public static String resource_prefix = 'D://test//'; public static void setDefaultBaseDir(String defaultBaseDir) {FileUploadUtils.defaultBaseDir = defaultBaseDir; } public static String getDefaultBaseDir() {return defaultBaseDir; } /** * 以默認配置進行文件上傳 * * @param file 上傳的文件 * @return 文件名稱 * @throws Exception */ public static final String upload(MultipartFile file) throws IOException {try { return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);} catch (Exception e) { throw new IOException(e.getMessage(), e);} } /** * 文件上傳 * * @param baseDir 相對應用的基目錄 * @param file 上傳的文件 * @param allowedExtension 上傳文件類型 * @return 返回上傳成功的文件名 * @throws FileSizeLimitExceededException 如果超出最大大小 * @throws FileNameLengthLimitExceededException 文件名太長 * @throws IOException 比如讀寫文件出錯時 * @throws InvalidExtensionException 文件校驗異常 */ public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) throws FileUploadBase.FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, InvalidExtensionException {int fileNamelength = file.getOriginalFilename().length();if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) { throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);}assertAllowed(file, allowedExtension);String fileName = extractFilename(file);File desc = getAbsoluteFile(baseDir, fileName);file.transferTo(desc);String pathFileName = getPathFileName(baseDir, fileName);return pathFileName; } /** * 編碼文件名 */ public static final String extractFilename(MultipartFile file) {String fileName = file.getOriginalFilename();String extension = getExtension(file);fileName = DateUtils.datePath() + '/' + IdUtils.fastUUID() + '.' + extension;return fileName; } private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {File desc = new File(uploadDir + File.separator + fileName);if (!desc.getParentFile().exists()) { desc.getParentFile().mkdirs();}if (!desc.exists()) { desc.createNewFile();}return desc; } private static final String getPathFileName(String uploadDir, String fileName) throws IOException {int dirLastIndex = defaultBaseDir.length() + 1;String currentDir = StringUtils.substring(uploadDir, dirLastIndex);String pathFileName = resource_prefix + '/' + currentDir + '/' + fileName;return pathFileName; } /** * 文件大小校驗 * * @param file 上傳的文件 * @return * @throws FileSizeLimitExceededException 如果超出最大大小 * @throws InvalidExtensionException */ public static final void assertAllowed(MultipartFile file, String[] allowedExtension) throws FileSizeLimitExceededException, InvalidExtensionException {long size = file.getSize();if (DEFAULT_MAX_SIZE != -1 && size > DEFAULT_MAX_SIZE) { throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);}String fileName = file.getOriginalFilename();String extension = getExtension(file);if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) { if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,fileName); } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,fileName); } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,fileName); } else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) {throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,fileName); } else {throw new InvalidExtensionException(allowedExtension, extension, fileName); }} } /** * 判斷MIME類型是否是允許的MIME類型 * * @param extension * @param allowedExtension * @return */ public static final boolean isAllowedExtension(String extension, String[] allowedExtension) {for (String str : allowedExtension) { if (str.equalsIgnoreCase(extension)) {return true; }}return false; } /** * 獲取文件名的后綴 * * @param file 表單文件 * @return 后綴名 */ public static final String getExtension(MultipartFile file) {String extension = FilenameUtils.getExtension(file.getOriginalFilename());if (StringUtils.isEmpty(extension)) { extension = MimeTypeUtils.getExtension(file.getContentType());}return extension; }}2.FileUtils.java

package com.springcloud.blog.admin.util.file;import javax.servlet.http.HttpServletRequest;import java.io.*;import java.net.URLEncoder;/** * 文件處理工具類 * * @author youcong */public class FileUtils extends org.apache.commons.io.FileUtils { public static String FILENAME_PATTERN = '[a-zA-Z0-9_-|.u4e00-u9fa5]+'; /** * 輸出指定文件的byte數組 * * @param filePath 文件路徑 * @param os 輸出流 * @return */ public static void writeBytes(String filePath, OutputStream os) throws IOException {FileInputStream fis = null;try { File file = new File(filePath); if (!file.exists()) {throw new FileNotFoundException(filePath); } fis = new FileInputStream(file); byte[] b = new byte[1024]; int length; while ((length = fis.read(b)) > 0) {os.write(b, 0, length); }} catch (IOException e) { throw e;} finally { if (os != null) {try { os.close();} catch (IOException e1) { e1.printStackTrace();} } if (fis != null) {try { fis.close();} catch (IOException e1) { e1.printStackTrace();} }} } /** * 刪除文件 * * @param filePath 文件 * @return */ public static boolean deleteFile(String filePath) {boolean flag = false;File file = new File(filePath);// 路徑為文件且不為空則進行刪除if (file.isFile() && file.exists()) { file.delete(); flag = true;}return flag; } /** * 文件名稱驗證 * * @param filename 文件名稱 * @return true 正常 false 非法 */ public static boolean isValidFilename(String filename) {return filename.matches(FILENAME_PATTERN); } /** * 下載文件名重新編碼 * * @param request 請求對象 * @param fileName 文件名 * @return 編碼后的文件名 */ public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException {final String agent = request.getHeader('USER-AGENT');String filename = fileName;if (agent.contains('MSIE')) { // IE瀏覽器 filename = URLEncoder.encode(filename, 'utf-8'); filename = filename.replace('+', ' ');} else if (agent.contains('Firefox')) { // 火狐瀏覽器 filename = new String(fileName.getBytes(), 'ISO8859-1');} else if (agent.contains('Chrome')) { // google瀏覽器 filename = URLEncoder.encode(filename, 'utf-8');} else { // 其它瀏覽器 filename = URLEncoder.encode(filename, 'utf-8');}return filename; }}3.MimeTypeUtils.java

package com.springcloud.blog.admin.util.file;/** * @description: * @author: youcong * @time: 2020/9/28 11:37 */public class MimeTypeUtils { public static final String IMAGE_PNG = 'image/png'; public static final String IMAGE_JPG = 'image/jpg'; public static final String IMAGE_JPEG = 'image/jpeg'; public static final String IMAGE_BMP = 'image/bmp'; public static final String IMAGE_GIF = 'image/gif'; public static final String[] IMAGE_EXTENSION = {'bmp', 'gif', 'jpg', 'jpeg', 'png'}; public static final String[] FLASH_EXTENSION = {'swf', 'flv'}; public static final String[] MEDIA_EXTENSION = {'swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'}; public static final String[] VIDEO_EXTENSION = {'mp4', 'avi', 'rmvb'}; public static final String[] DEFAULT_ALLOWED_EXTENSION = { // 圖片 'bmp', 'gif', 'jpg', 'jpeg', 'png', // word excel powerpoint 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'html', 'htm', 'txt', // 壓縮文件 'rar', 'zip', 'gz', 'bz2', // 視頻格式 'mp4', 'avi', 'rmvb', // pdf 'pdf'}; public static String getExtension(String prefix) {switch (prefix) { case IMAGE_PNG:return 'png'; case IMAGE_JPG:return 'jpg'; case IMAGE_JPEG:return 'jpeg'; case IMAGE_BMP:return 'bmp'; case IMAGE_GIF:return 'gif'; default:return '';} }}4.FileException.java

package com.springcloud.blog.admin.exception.file;import com.springcloud.blog.admin.exception.BaseException;/** * @description: 文件信息異常類 * @author: youcong * @time: 2020/9/28 11:41 */public class FileException extends BaseException { private static final long serialVersionUID = 1L; public FileException(String code, Object[] args) {super('file', code, args, null); }}5.FileNameLengthLimitExceededException.java

package com.springcloud.blog.admin.exception.file;/** * @description:文件名稱超長限制異常類 * @author: youcong * @time: 2020/9/28 11:41 */public class FileNameLengthLimitExceededException extends FileException { private static final long serialVersionUID = 1L; public FileNameLengthLimitExceededException(int defaultFileNameLength) {super('upload.filename.exceed.length', new Object[]{defaultFileNameLength}); }}6.FileSizeLimitExceededException.java

package com.springcloud.blog.admin.exception.file;/** * @description: 文件名大小限制異常類 * @author: youcong * @time: 2020/9/28 11:42 */public class FileSizeLimitExceededException extends FileException { private static final long serialVersionUID = 1L; public FileSizeLimitExceededException(long defaultMaxSize) {super('upload.exceed.maxSize', new Object[]{defaultMaxSize}); }}7.InvalidExtensionException.java

package com.springcloud.blog.admin.exception.file;/** * @description: 文件上傳錯誤異常類 * @author: youcong * @time: 2020/9/28 11:42 */import org.apache.commons.fileupload.FileUploadException;import java.util.Arrays;public class InvalidExtensionException extends FileUploadException { private static final long serialVersionUID = 1L; private String[] allowedExtension; private String extension; private String filename; public InvalidExtensionException(String[] allowedExtension, String extension, String filename) {super('filename : [' + filename + '], extension : [' + extension + '], allowed extension : [' + Arrays.toString(allowedExtension) + ']');this.allowedExtension = allowedExtension;this.extension = extension;this.filename = filename; } public String[] getAllowedExtension() {return allowedExtension; } public String getExtension() {return extension; } public String getFilename() {return filename; } public static class InvalidImageExtensionException extends InvalidExtensionException {private static final long serialVersionUID = 1L;public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename);} } public static class InvalidFlashExtensionException extends InvalidExtensionException {private static final long serialVersionUID = 1L;public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename);} } public static class InvalidMediaExtensionException extends InvalidExtensionException {private static final long serialVersionUID = 1L;public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename);} } public static class InvalidVideoExtensionException extends InvalidExtensionException {private static final long serialVersionUID = 1L;public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename);} }}

8.BaseException.java

package com.springcloud.blog.admin.exception;/** * 基礎異常 * * @author youcong */public class BaseException extends RuntimeException { private static final long serialVersionUID = 1L; /** * 所屬模塊 */ private String module; /** * 錯誤碼 */ private String code; /** * 錯誤碼對應的參數 */ private Object[] args; /** * 錯誤消息 */ private String defaultMessage; public BaseException(String module, String code, Object[] args, String defaultMessage) {this.module = module;this.code = code;this.args = args;this.defaultMessage = defaultMessage; } public BaseException(String module, String code, Object[] args) {this(module, code, args, null); } public BaseException(String module, String defaultMessage) {this(module, null, null, defaultMessage); } public BaseException(String code, Object[] args) {this(null, code, args, null); } public BaseException(String defaultMessage) {this(null, null, null, defaultMessage); } public String getModule() {return module; } public String getCode() {return code; } public Object[] getArgs() {return args; } public String getDefaultMessage() {return defaultMessage; }}二、單文件上傳代碼

@PostMapping('/post/uploadFile')@ApiOperation('文章上傳特色圖片')public ResponseBaseDTO<String> uploadFile(@RequestParam('file') MultipartFile file) { logger.info('/post/uploadFile'); try {String fileUrl = FileUploadUtils.upload(file);if (fileUrl != null) { return ResponseBaseDTO.createSuccResp(fileUrl);}return ResponseBaseDTO.createFailResp(fileUrl); } catch (Exception e) {logger.error('/post/uploadFile', e);return ResponseBaseDTO.createFailResp(e.getMessage()); }}三、多文件上傳代碼

@PostMapping('/batchImportsUsers')@ApiOperation('批量導入用戶數據小時')public ResponseBaseDTO<String> batchImportsUsers(MultipartFile[] uploadFiles) { if (uploadFiles.length > 0) {for (int i = 0; i < uploadFiles.length; i++) { try {importUserExcelData(uploadFiles[i]); } catch (Exception e) {e.printStackTrace(); }}return ResponseBaseDTO.createSuccResp(); } return ResponseBaseDTO.createFailResp(e.getMessage());}

以上就是SpringBoot實現單文件與多文件上傳的詳細內容,更多關于SpringBoot文件上傳的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 砍排机-锯骨机-冻肉切丁机-熟肉切片机-预制菜生产线一站式服务厂商 - 广州市祥九瑞盈机械设备有限公司 | 民用音响-拉杆音响-家用音响-ktv专用音响-万昌科技 | 垃圾压缩设备_垃圾处理设备_智能移动式垃圾压缩设备--山东明莱环保设备有限公司 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | LOGO设计_品牌设计_VI设计 - 特创易 | 牛奶检测仪-乳成分分析仪-北京海谊 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 杭州代理记账多少钱-注册公司代办-公司注销流程及费用-杭州福道财务管理咨询有限公司 | 干粉砂浆设备_干混砂浆生产线_腻子粉加工设备_石膏抹灰砂浆生产成套设备厂家_干粉混合设备_砂子烘干机--郑州铭将机械设备有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 食品质构分析仪-氧化诱导分析仪-瞬态法导热系数仪|热冰百科 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 北京印刷厂_北京印刷_北京印刷公司_北京印刷厂家_北京东爵盛世印刷有限公司 | 泰兴市热钻机械有限公司-热熔钻孔机-数控热熔钻-热熔钻孔攻牙一体机 | 仿真植物|仿真树|仿真花|假树|植物墙 - 广州天昆仿真植物有限公司 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 合肥制氮机_合肥空压机厂家_安徽真空泵-凯圣精机 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 防水套管-柔性防水套管-刚性防水套管-上海执品管件有限公司 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 丹尼克尔拧紧枪_自动送钉机_智能电批_柔性振动盘_螺丝供料器品牌 | 成都茶楼装修公司 - 会所设计/KTV装修 - 成都朗煜装饰公司 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 冷镦机-多工位冷镦机-高速冷镦机厂家-温州金诺机械设备制造有限公司 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 升降机-高空作业车租赁-蜘蛛车-曲臂式伸缩臂剪叉式液压升降平台-脚手架-【普雷斯特公司厂家】 | 逗网红-抖音网红-快手网红-各大平台网红物品导航 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 家德利门业,家居安全门,别墅大门 - 安徽家德利门业有限公司 | 深圳湾1号房价_深圳湾1号二手房源 | 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 政府回应:200块在义乌小巷能买到爱情吗?——揭秘打工族省钱约会的生存智慧 |