diff --git a/CHANGELOG.md b/CHANGELOG.md index 062c36e99..8f13b4f44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * 【extra 】 ArrayUtil增加map方法重载 * 【crypto 】 AsymmetricAlgorithm增加RSA_ECB("RSA/ECB/NoPadding")(issue#1368@Github) * 【core 】 补充StrUtil.padXXX注释(issue#I2E1S7@Gitee) +* 【core 】 修改上传文件检查逻辑 ### Bug修复 * 【core 】 修复FileUtil.move以及PathUtil.copy等无法自动创建父目录的问题(issue#I2CKTI@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java index 2daef26df..6031665a8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java @@ -840,7 +840,7 @@ public class FileUtil extends PathUtil { int exceptionsCount = 0; while (true) { try { - File file = File.createTempFile(prefix, suffix, dir).getCanonicalFile(); + File file = File.createTempFile(prefix, suffix, mkdir(dir)).getCanonicalFile(); if (isReCreat) { //noinspection ResultOfMethodCallIgnored file.delete(); @@ -978,6 +978,8 @@ public class FileUtil extends PathUtil { * @see PathUtil#move(Path, Path, boolean) */ public static void move(File src, File target, boolean isOverride) throws IORuntimeException { + Assert.notNull(src, "Src file must be not null!"); + Assert.notNull(target, "target file must be not null!"); move(src.toPath(), target.toPath(), isOverride); } diff --git a/hutool-core/src/main/java/cn/hutool/core/net/multipart/MultipartFormData.java b/hutool-core/src/main/java/cn/hutool/core/net/multipart/MultipartFormData.java index ddce6b3b4..cc3c58daf 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/multipart/MultipartFormData.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/multipart/MultipartFormData.java @@ -14,7 +14,7 @@ import java.util.Set; /** * HttpRequest解析器
* 来自Jodd - * + * * @author jodd.org */ public class MultipartFormData { @@ -39,7 +39,7 @@ public class MultipartFormData { /** * 构造 - * + * * @param uploadSetting 上传设定 */ public MultipartFormData(UploadSetting uploadSetting) { @@ -49,7 +49,7 @@ public class MultipartFormData { /** * 提取上传的文件和表单数据 - * + * * @param inputStream HttpRequest流 * @param charset 编码 * @throws IOException IO异常 @@ -71,10 +71,10 @@ public class MultipartFormData { if (fileName.length() > 0 && header.contentType.contains("application/x-macbinary")) { input.skipBytes(128); } - UploadFile newFile = new UploadFile(header, setting); - newFile.processStream(input); - - putFile(header.formFieldName, newFile); + final UploadFile newFile = new UploadFile(header, setting); + if(newFile.processStream(input)){ + putFile(header.formFieldName, newFile); + } } else { // 标准表单项 putParameter(header.formFieldName, input.readString(charset)); @@ -96,7 +96,7 @@ public class MultipartFormData { // ---------------------------------------------------------------- parameters /** * 返回单一参数值,如果有多个只返回第一个 - * + * * @param paramName 参数名 * @return null未找到,否则返回值 */ @@ -117,7 +117,7 @@ public class MultipartFormData { /** * 获得数组表单值 - * + * * @param paramName 参数名 * @return 数组表单值 */ @@ -142,7 +142,7 @@ public class MultipartFormData { /** * 获取所有属性的集合 - * + * * @return 所有属性的集合 */ public Map getParamMap() { @@ -161,7 +161,7 @@ public class MultipartFormData { // --------------------------------------------------------------------------- Files parameters /** * 获取上传的文件 - * + * * @param paramName 文件参数名称 * @return 上传的文件, 如果无为null */ @@ -176,7 +176,7 @@ public class MultipartFormData { /** * 获得某个属性名的所有文件
* 当表单中两个文件使用同一个name的时候 - * + * * @param paramName 属性名 * @return 上传的文件列表 */ @@ -202,7 +202,7 @@ public class MultipartFormData { /** * 获取上传的文件属性名集合 - * + * * @return 上传的文件属性名集合 */ public Set getFileParamNames() { @@ -211,7 +211,7 @@ public class MultipartFormData { /** * 获取文件映射 - * + * * @return 文件映射 */ public Map getFileMap() { @@ -230,7 +230,7 @@ public class MultipartFormData { // --------------------------------------------------------------------------- Load /** * 是否已被解析 - * + * * @return 如果流已被解析返回true */ public boolean isLoaded() { @@ -240,7 +240,7 @@ public class MultipartFormData { // ---------------------------------------------------------------- Private method start /** * 加入上传文件 - * + * * @param name 参数名 * @param uploadFile 文件 */ @@ -250,7 +250,7 @@ public class MultipartFormData { /** * 加入普通参数 - * + * * @param name 参数名 * @param value 参数值 */ @@ -260,7 +260,7 @@ public class MultipartFormData { /** * 设置使输入流为解析状态,如果已解析,则抛出异常 - * + * * @throws IOException IO异常 */ private void setLoaded() throws IOException { diff --git a/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java b/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java index e814fa499..94eaa1ee0 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/multipart/UploadFile.java @@ -9,6 +9,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.nio.file.NoSuchFileException; /** * 上传的文件对象 @@ -86,12 +87,19 @@ public class UploadFile { destination = new File(destination, this.header.getFileName()); } if (data != null) { + // 内存中 FileUtil.writeBytes(data, destination); data = null; } else { - if (tempFile != null) { - FileUtil.move(tempFile, destination, true); + // 临时文件 + if(null == this.tempFile){ + throw new NullPointerException("Temp file is null !"); } + if(false == this.tempFile.exists()){ + throw new NoSuchFileException("Temp file: [" + this.tempFile.getAbsolutePath() + "] not exist!"); + } + + FileUtil.move(tempFile, destination, true); } return destination; } diff --git a/hutool-http/src/test/java/cn/hutool/http/UploadTest.java b/hutool-http/src/test/java/cn/hutool/http/UploadTest.java index 655998b34..aa753956d 100644 --- a/hutool-http/src/test/java/cn/hutool/http/UploadTest.java +++ b/hutool-http/src/test/java/cn/hutool/http/UploadTest.java @@ -51,10 +51,10 @@ public class UploadTest { @Test @Ignore - public void uploadTest() { + public void uploadTest2() { //客户端 - String url = "http://localhost:8888/file"; - Path file = Paths.get("D:\\testBigData_upload.xlsx"); + String url = "http://192.168.1.200:8888/meta/upload/img"; + Path file = Paths.get("D:\\test\\testBigData_upload.xlsx"); Map headers = new HashMap<>(16); headers.put("md5", "aaaaaaaa");