<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Java實現後臺圖片上傳,將上傳圖片的介面進行分層,便於維護介面。
將介面分為單圖片上傳以及多圖片上傳
public interface FileUploadService { //單圖片上傳 PicUploadResult uplodadImg(MultipartFile uploadFile, HttpServletRequest request); //多圖片上傳 PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request); }
上傳圖片方法類(主要)
上傳多個圖片只是使用了陣列的方式將檔案存到MultipartFile裡面。以防程式碼冗餘,所以將實現方法抽出來
/** * 上傳圖片方法類 * @param multipartFile * @param request * @return */ private PicUploadResult uploadImgMethod(MultipartFile multipartFile, HttpServletRequest request) { PicUploadResult picUploadResult = new PicUploadResult(); if (multipartFile.isEmpty()) { //返回選擇檔案提示 picUploadResult.setLegal(false); return picUploadResult; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/"); String format = sdf.format(new Date()); //存放上傳檔案的資料夾 File file = new File(baseFilePath + format); logger.info("-----------存放上傳檔案的資料夾【" + file + "】-----------"); logger.info("-----------輸出資料夾絕對路徑 -- 這裡的絕對路徑是相當於當前專案的路徑而不是「容器」路徑【" + file.getAbsolutePath() + "】-----------"); if (!file.isDirectory()) { //遞迴生成資料夾 file.mkdirs(); } //獲取原始的名字 original:最初的,起始的 方法是得到原來的檔名在客戶機的檔案系統名稱 String oldName = multipartFile.getOriginalFilename(); logger.info("-----------檔案原始的名字【" + oldName + "】-----------"); String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."), oldName.length()); logger.info("-----------檔案要儲存後的新名字【" + newName + "】-----------"); try { //構建真實的檔案路徑 File newFile = new File(file.getAbsolutePath() + File.separator + newName); //轉存檔案到指定路徑,如果檔名重複的話,將會覆蓋掉之前的檔案,這裡是把檔案上傳到 「絕對路徑」 multipartFile.transferTo(newFile); String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/picbook/" + UPLOAD_PATH_PREFIX + format + newName; logger.info("-----------【" + filePath + "】-----------"); picUploadResult.setLegal(true); picUploadResult.setImgPath(filePath); return picUploadResult; } catch (Exception e) { e.printStackTrace(); } picUploadResult.setLegal(false); return picUploadResult; }
實現方法介面
單圖片上傳
public PicUploadResult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) { return uploadImgMethod(multipartFile, request); }
多圖片上傳
public PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request) { List<String> imgPaths = new ArrayList<>(); for (MultipartFile multipartFile : uploadFile) { PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request); if(picUploadResult.isLegal()){ imgPaths.add(picUploadResult.getImgPath()); }else{ return picUploadResult; } } PicUploadResult picUploadResult = new PicUploadResult(); picUploadResult.setLegal(true); picUploadResult.setImgPahts(imgPaths); return picUploadResult; }
實現方法補充
// 專案上傳至絕對路徑(在yml裡設定你的專案絕對路徑) @Value("${file.save-path}") private String baseFilePath; // 專案根路徑下的目錄 -- SpringBoot static 目錄相當於是根路徑下(SpringBoot 預設) private final static String UPLOAD_PATH_PREFIX = "statics/uploadFile/";
public class FileUploadController { // 允許上傳的格式 圖片形式 private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".png"}; @Resource private FileUploadService fileUploadService; @PostMapping("/uploadImg") public R uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) { boolean isFlag = false; for (String type : IMAGE_TYPE) { System.out.println(file.getOriginalFilename()); if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) { isFlag = true; break; } } if (isFlag) { PicUploadResult picUploadResult = fileUploadService.uplodadImg(file, request); boolean isLegal = picUploadResult.isLegal(); if (isLegal) { Map resMap = new HashMap<>(); resMap.put("imgPath", picUploadResult.getImgPath()); return R.ok(resMap); } else { return R.error("圖片上傳有誤"); } } else { return R.error("上傳的圖片格式必須為:bmp,jpg,jpeg,png"); } } @PostMapping("/uploadManyImg") public R uploadManyImg(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) { boolean isFlag = false; for (MultipartFile uploadFile : files) { for (String type : IMAGE_TYPE) { if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) { isFlag = true; break; } } } if (isFlag) { PicUploadResult picUploadResult = fileUploadService.uploadManyImg(files, request); boolean isLegal = picUploadResult.isLegal(); if (isLegal) { Map resMap = new HashMap<>(); resMap.put("imgPaths", picUploadResult.getImgPahts()); return R.ok(resMap); } else { return R.error("圖片上傳有誤"); } } else { return R.error("上傳的圖片格式必須為:bmp,jpg,jpeg,png"); } } }
根據實際情況新增所需的欄位
public class PicUploadResult { private boolean isLegal; private String imgPath; private List<String> imgPahts; }
Postman
(僅用於個人學習編碼記錄,程式碼均參考於百度以及自己改進,如有疑問歡迎大家積極討論)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45