From 9d2c453bb0b9671a8961c0175c5abeee861f7d97 Mon Sep 17 00:00:00 2001 From: xiongxiaoyang <773861846@qq.com> Date: Sun, 16 May 2021 09:47:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BE=E7=89=87=E4=B8=8A=E4=BC=A0=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java2nb/novel/core/bean/ResultBean.java | 22 +++---- .../novel/core/enums/ResponseStatus.java | 6 ++ .../java2nb/novel/core/utils/FileUtil.java | 21 +++++- .../src/main/resources/application-common.yml | 7 ++ .../novel/controller/FileController.java | 55 ++++++++-------- .../resources/static/javascript/common.js | 34 +++++++++- .../resources/templates/author/book_add.html | 33 +++++----- .../resources/templates/author/index.html | 61 ++++++++--------- .../main/resources/templates/user/setup.html | 65 ++++++++++--------- 9 files changed, 189 insertions(+), 115 deletions(-) diff --git a/novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java b/novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java index d8152f2..6597a0e 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/bean/ResultBean.java @@ -30,9 +30,9 @@ public class ResultBean implements Serializable { } - private ResultBean(ResponseStatus ResponseStatus) { - this.code = ResponseStatus.getCode();; - this.msg = ResponseStatus.getMsg(); + private ResultBean(ResponseStatus responseStatus) { + this.code = responseStatus.getCode();; + this.msg = responseStatus.getMsg(); } private ResultBean(T data) { @@ -44,30 +44,30 @@ public class ResultBean implements Serializable { /** * 业务处理成功,无数据返回 * */ - public static ResultBean ok() { - return new ResultBean(); + public static ResultBean ok() { + return new ResultBean<>(); } /** * 业务处理成功,有数据返回 * */ - public static ResultBean ok(T data) { - return new ResultBean(data); + public static ResultBean ok(T data) { + return new ResultBean<>(data); } /** * 业务处理失败 * */ - public static ResultBean fail(ResponseStatus ResponseStatus) { - return new ResultBean(ResponseStatus); + public static ResultBean fail(ResponseStatus responseStatus) { + return new ResultBean<>(responseStatus); } /** * 系统错误 * */ - public static ResultBean error() { - return new ResultBean(ResponseStatus.ERROR); + public static ResultBean error() { + return new ResultBean<>(ResponseStatus.ERROR); } } diff --git a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java index 5eb3d5b..b73bc5a 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/enums/ResponseStatus.java @@ -68,6 +68,12 @@ public enum ResponseStatus { * */ ES_SEARCH_FAIL(9001,"搜索引擎查询错误!"), + /** + * 文件相关错误 + * */ + FILE_DIR_MAKE_FAIL(10001,"目录创建失败"), + FILE_NOT_IMAGE(10002,"请上传图片类型的文件"), + FILE_SIZE_LIMIT(10003,"文件大小超出限制"), /** * 其他通用错误 diff --git a/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java b/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java index 5661c49..8caf2bc 100644 --- a/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java +++ b/novel-common/src/main/java/com/java2nb/novel/core/utils/FileUtil.java @@ -1,6 +1,7 @@ package com.java2nb.novel.core.utils; import lombok.SneakyThrows; +import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.Charsets; import org.apache.http.client.utils.DateUtils; @@ -11,6 +12,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; import java.io.*; import java.util.Date; import java.util.Objects; @@ -19,13 +21,14 @@ import java.util.Objects; * 文件操作工具类 * @author 11797 */ +@UtilityClass @Slf4j public class FileUtil { /** * 网络图片转本地 * */ - public static String network2Local(String picSrc,String picSavePath,String visitPrefix) { + public String network2Local(String picSrc,String picSavePath,String visitPrefix) { InputStream input = null; OutputStream out = null; try { @@ -82,5 +85,21 @@ public class FileUtil { } + /** + * 判断文件是否为图片 + * @param file 需要判断的文件 + * @return true:是图片,false:不是图片 + * */ + @SneakyThrows + public boolean isImage(File file){ + + BufferedImage bi = ImageIO.read(file); + + return bi != null; + + + } + + } diff --git a/novel-common/src/main/resources/application-common.yml b/novel-common/src/main/resources/application-common.yml index b3cf4a0..e98b078 100644 --- a/novel-common/src/main/resources/application-common.yml +++ b/novel-common/src/main/resources/application-common.yml @@ -11,6 +11,11 @@ spring: generator: write-numbers-as-strings: true + #上传文件的最大值(1M) + servlet: + multipart: + max-file-size: 1048576 + #缓存类型,ehcache(默认)、redis cache: type: ehcache @@ -26,3 +31,5 @@ logging: config: classpath:logback-boot.xml + + diff --git a/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java b/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java index d720343..6cd9eb3 100644 --- a/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java +++ b/novel-front/src/main/java/com/java2nb/novel/controller/FileController.java @@ -2,28 +2,23 @@ package com.java2nb.novel.controller; import com.java2nb.novel.core.bean.ResultBean; import com.java2nb.novel.core.cache.CacheService; +import com.java2nb.novel.core.enums.ResponseStatus; +import com.java2nb.novel.core.exception.BusinessException; import com.java2nb.novel.core.utils.Constants; +import com.java2nb.novel.core.utils.FileUtil; import com.java2nb.novel.core.utils.RandomValidateCodeUtil; -import com.java2nb.novel.core.utils.RestTemplateUtil; import com.java2nb.novel.core.utils.UUIDUtil; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.codec.Charsets; import org.apache.http.client.utils.DateUtils; import org.springframework.beans.factory.annotation.Value; -import org.springframework.core.io.Resource; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import java.io.*; import java.util.Date; import java.util.Objects; @@ -63,29 +58,35 @@ public class FileController { } /** - * 文件上传 + * 图片上传 + * @return */ + @SneakyThrows @ResponseBody - @PostMapping("/upload") - ResultBean upload(@RequestParam("file") MultipartFile file) { + @PostMapping("/picUpload") + ResultBean upload(@RequestParam("file") MultipartFile file) { Date currentDate = new Date(); - try { - String savePath = - Constants.LOCAL_PIC_PREFIX + DateUtils.formatDate(currentDate, "yyyy") + "/" + - DateUtils.formatDate(currentDate, "MM") + "/" + - DateUtils.formatDate(currentDate, "dd") ; - String oriName = file.getOriginalFilename(); - String saveFileName = UUIDUtil.getUUID32() + oriName.substring(oriName.lastIndexOf(".")); - File saveFile = new File( picSavePath + savePath, saveFileName); - if (!saveFile.getParentFile().exists()) { - saveFile.getParentFile().mkdirs(); + String savePath = + Constants.LOCAL_PIC_PREFIX + DateUtils.formatDate(currentDate, "yyyy") + "/" + + DateUtils.formatDate(currentDate, "MM") + "/" + + DateUtils.formatDate(currentDate, "dd"); + String oriName = file.getOriginalFilename(); + assert oriName != null; + String saveFileName = UUIDUtil.getUUID32() + oriName.substring(oriName.lastIndexOf(".")); + File saveFile = new File(picSavePath + savePath, saveFileName); + if (!saveFile.getParentFile().exists()) { + boolean isSuccess = saveFile.getParentFile().mkdirs(); + if(!isSuccess){ + throw new BusinessException(ResponseStatus.FILE_DIR_MAKE_FAIL); } - file.transferTo(saveFile); - return ResultBean.ok(savePath+"/"+saveFileName); - } catch (Exception e) { - log.error(e.getMessage(), e); - return ResultBean.error(); } + file.transferTo(saveFile); + if(!FileUtil.isImage(saveFile)){ + //上传的文件不是图片 + saveFile.delete(); + throw new BusinessException(ResponseStatus.FILE_NOT_IMAGE); + }; + return ResultBean.ok(savePath + "/" + saveFileName); } diff --git a/novel-front/src/main/resources/static/javascript/common.js b/novel-front/src/main/resources/static/javascript/common.js index e844637..e3fa1c8 100644 --- a/novel-front/src/main/resources/static/javascript/common.js +++ b/novel-front/src/main/resources/static/javascript/common.js @@ -124,4 +124,36 @@ String.prototype.isNickName = function () { function logout() { $.cookie('Authorization', null,{ path: '/' }); location.reload(); -} \ No newline at end of file +} + + +function isImg(str) { + return !str.search("[.]+(jpg|jpeg|swf|gif|png|JPG|JPEG|SWF|GIF|PNG)$"); +} + + +//校验图片上传 +function checkPicUpload(file){ + + if(!isImg(file.value.substr(file.value.lastIndexOf(".")))){ + layer.alert('只能上传图片格式的文件!'); + return false; + } + var fileSize = 0; + var isIE = /msie/i.test(navigator.userAgent) && !window.opera; + if (isIE && !file.files) { + var filePath = file.value; + var fileSystem = new ActiveXObject("Scripting.FileSystemfileect"); + var file = fileSystem.GetFile (filePath); + fileSize = file.Size; + }else { + fileSize = file.files[0].size; + } + fileSize=Math.round(fileSize/1024*100)/100; //单位为KB + if(fileSize>=1024){ + layer.alert('上传的图片大小不能超过1M!'); + return false; + } + return true; +} + diff --git a/novel-front/src/main/resources/templates/author/book_add.html b/novel-front/src/main/resources/templates/author/book_add.html index 3985f37..a622e04 100644 --- a/novel-front/src/main/resources/templates/author/book_add.html +++ b/novel-front/src/main/resources/templates/author/book_add.html @@ -142,29 +142,32 @@ + +