From fba7ffe77c5b9295b06b177cef3025b6d47ed48a Mon Sep 17 00:00:00 2001 From: RuoYi <yzz_ivy@163.com> Date: 星期一, 06 二月 2023 11:40:33 +0800 Subject: [PATCH] 修复匿名注解Anonymous空指针问题(I683DT) --- src/main/java/com/ruoyi/common/utils/file/FileUtils.java | 201 +++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 175 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index 03f5aa2..d4815b0 100644 --- a/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -3,11 +3,21 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.framework.config.RuoYiConfig; /** * 鏂囦欢澶勭悊宸ュ叿绫� @@ -49,29 +59,48 @@ } finally { - if (os != null) - { - try - { - os.close(); - } - catch (IOException e1) - { - e1.printStackTrace(); - } - } - if (fis != null) - { - try - { - fis.close(); - } - catch (IOException e1) - { - e1.printStackTrace(); - } - } + IOUtils.close(os); + IOUtils.close(fis); } + } + + /** + * 鍐欐暟鎹埌鏂囦欢涓� + * + * @param data 鏁版嵁 + * @return 鐩爣鏂囦欢 + * @throws IOException IO寮傚父 + */ + public static String writeImportBytes(byte[] data) throws IOException + { + return writeBytes(data, RuoYiConfig.getImportPath()); + } + + /** + * 鍐欐暟鎹埌鏂囦欢涓� + * + * @param data 鏁版嵁 + * @param uploadDir 鐩爣鏂囦欢 + * @return 鐩爣鏂囦欢 + * @throws IOException IO寮傚父 + */ + public static String writeBytes(byte[] data, String uploadDir) throws IOException + { + FileOutputStream fos = null; + String pathName = ""; + try + { + String extension = getFileExtendName(data); + pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); + fos = new FileOutputStream(file); + fos.write(data); + } + finally + { + IOUtils.close(fos); + } + return FileUploadUtils.getPathFileName(uploadDir, pathName); } /** @@ -87,8 +116,7 @@ // 璺緞涓烘枃浠朵笖涓嶄负绌哄垯杩涜鍒犻櫎 if (file.isFile() && file.exists()) { - file.delete(); - flag = true; + flag = file.delete(); } return flag; } @@ -105,14 +133,37 @@ } /** + * 妫�鏌ユ枃浠舵槸鍚﹀彲涓嬭浇 + * + * @param resource 闇�瑕佷笅杞界殑鏂囦欢 + * @return true 姝e父 false 闈炴硶 + */ + public static boolean checkAllowDownload(String resource) + { + // 绂佹鐩綍涓婅烦绾у埆 + if (StringUtils.contains(resource, "..")) + { + return false; + } + + // 妫�鏌ュ厑璁镐笅杞界殑鏂囦欢瑙勫垯 + if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) + { + return true; + } + + // 涓嶅湪鍏佽涓嬭浇鐨勬枃浠惰鍒� + return false; + } + + /** * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮� * * @param request 璇锋眰瀵硅薄 * @param fileName 鏂囦欢鍚� * @return 缂栫爜鍚庣殑鏂囦欢鍚� */ - public static String setFileDownloadHeader(HttpServletRequest request, String fileName) - throws UnsupportedEncodingException + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { final String agent = request.getHeader("USER-AGENT"); String filename = fileName; @@ -139,4 +190,102 @@ } return filename; } + + /** + * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮� + * + * @param response 鍝嶅簲瀵硅薄 + * @param realFileName 鐪熷疄鏂囦欢鍚� + */ + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException + { + String percentEncodedFileName = percentEncode(realFileName); + + StringBuilder contentDispositionValue = new StringBuilder(); + contentDispositionValue.append("attachment; filename=") + .append(percentEncodedFileName) + .append(";") + .append("filename*=") + .append("utf-8''") + .append(percentEncodedFileName); + + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); + response.setHeader("Content-disposition", contentDispositionValue.toString()); + response.setHeader("download-filename", percentEncodedFileName); + } + + /** + * 鐧惧垎鍙风紪鐮佸伐鍏锋柟娉� + * + * @param s 闇�瑕佺櫨鍒嗗彿缂栫爜鐨勫瓧绗︿覆 + * @return 鐧惧垎鍙风紪鐮佸悗鐨勫瓧绗︿覆 + */ + public static String percentEncode(String s) throws UnsupportedEncodingException + { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + return encode.replaceAll("\\+", "%20"); + } + + /** + * 鑾峰彇鍥惧儚鍚庣紑 + * + * @param photoByte 鍥惧儚鏁版嵁 + * @return 鍚庣紑鍚� + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "jpg"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "gif"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "jpg"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "bmp"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "png"; + } + return strFileExtendName; + } + + /** + * 鑾峰彇鏂囦欢鍚嶇О /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png + * + * @param fileName 璺緞鍚嶇О + * @return 娌℃湁鏂囦欢璺緞鐨勫悕绉� + */ + public static String getName(String fileName) + { + if (fileName == null) + { + return null; + } + int lastUnixPos = fileName.lastIndexOf('/'); + int lastWindowsPos = fileName.lastIndexOf('\\'); + int index = Math.max(lastUnixPos, lastWindowsPos); + return fileName.substring(index + 1); + } + + /** + * 鑾峰彇涓嶅甫鍚庣紑鏂囦欢鍚嶇О /profile/upload/2022/04/16/ruoyi.png -- ruoyi + * + * @param fileName 璺緞鍚嶇О + * @return 娌℃湁鏂囦欢璺緞鍜屽悗缂�鐨勫悕绉� + */ + public static String getNameNotSuffix(String fileName) + { + if (fileName == null) + { + return null; + } + String baseName = FilenameUtils.getBaseName(fileName); + return baseName; + } } -- Gitblit v1.9.3