开发中有个需求, 将一批 pdf 文件关联上多个物料, 现在的做法是通过
在第 1 步解压上传的 MultipartFile 时出现的问题:
java.lang.IllegalArgumentException: MALFORMED
at java.util.zip.ZipCoder.toString(ZipCoder.java:58)
at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:300)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122)
at cn.hutool.core.util.ZipUtil.read(ZipUtil.java:664)
at cn.hutool.core.util.ZipUtil.unzip(ZipUtil.java:638)
at cn.hutool.core.util.ZipUtil.unzip(ZipUtil.java:624)
以下为大致代码:
import cn.hutool.core.util.ZipUtil;
RestResponse uploadDiagram(@RequestParam MultipartFile file) {
// 临时保存
File tempDir = new File(configElement.getLocation() + "/" + DateTime.now().formatDateTime() + "/");
if (!tempDir.exists()) {
tempDir.mkdirs();
}
ZipUtil.unzip(file.getInputStream(), tempDir, Charset.forName("UTF-8"));
// 如果这个路径是文件夹
if (tempDir.isDirectory()) {
// todo 获取路径下的所有文件, 并上传 oss 获取链接
}
}
}
对话 ai 给出的问题分析和处理办法:
1.文件路径或文件名格式错误:如果 ZIP 文件中包含中文或其他特殊字符,且在不同操作系统之间传输时,可能会因为编码不一致导致错误。例如,Windows 默认使用 GBK 编码,而 Linux 和 macOS 使用 UTF-8 编码。
2.JDK 版本问题:在某些情况下,使用旧版本的 JDK 打包 ZIP 文件,然后在新版本的 JDK 上解压缩时可能会出现兼容性问题。
3.hutool 版本问题:如果您使用的是 hutool 工具包,特定版本(如 5.8.11 至 5.8.16 )可能存在处理 ZIP 文件时的 bug ,导致解压缩时出现错误。升级到 5.8.17 或更高版本可以解决这个问题。
针对这些问题,您可以尝试以下解决方案:
检查和修改文件编码:确保 ZIP 文件中的文件名和路径使用正确的编码格式。您可以尝试将 ZIP 文件的编码格式改为与您的操作系统一致的编码,例如使用 GBK 或 UTF-8 。
升级 hutool 版本:如果您使用的是 hutool ,升级到最新版本可能会解决这个问题。
使用 Apache Commons Compress:Apache Commons Compress 提供了更好的跨平台兼容性,您可以尝试使用这个库来处理 ZIP 文件。
捕获异常并处理:在代码中捕获 IllegalArgumentException 异常,并进行适当的错误处理。
使用流的方式解压:有时候使用流的方式解压 ZIP 文件可以避免编码问题。
尝试几种方式, 还是无法解决; 发现压缩文件中如果所有文件名文件夹没有中文和空格以及符号就可以正常运行 在此询问下如何解决这个问题或者有更合适的解决方案实现;
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.