halo
halo copied to clipboard
halo备份文件下载后若解压再压缩无法进行恢复,除非使用代码重新压缩
系统信息
ubuntu22
使用的哪种方式运行?
Docker
发生了什么?
解压失败,建议优化解压缩的方法
相关日志输出
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:na]
at java.base/java.lang.Thread.run(Unknown Source) ~[na:na]
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.base/java.lang.String.throwMalformed(Unknown Source) ~[na:na]
at java.base/java.lang.String.decodeUTF8_UTF16(Unknown Source) ~[na:na]
at java.base/java.lang.String.newStringUTF8NoRepl(Unknown Source) ~[na:na]
at java.base/java.lang.Access.newStringUTF8NoRepl(Unknown Source) ~[na:na]
at java.base/java.util.zip.ZipCoder$UTF8ZipCoder.toString(Unknown Source) ~[na:na]
at java.base/java.util.zip.ZipCoder.toString(Unknown Source) ~[na:na]
at java.base/java.util.zip.ZipInputStream.readLOC(Unknown Source) ~[na:na]
at java.base/java.util.zip.ZipInputStream.getNextEntry(Unknown Source) ~[na:na]
at run.halo.app.infra.utils.FileUtils.unzip(FileUtils.java:100) ~[classes/:na]
附加信息
/**
- 临时解决解压失败的情况,使用源码重新压缩
- 编辑application/src/main/java/run/halo/app/infra/utils/FileUtils.java
- 复制下面的方法
- 要求文件依然是已解压的状态
*/ public static void main(String[] args) { //已解压的文件路径,记得进入层级 Path sourcePath= Path.of("C:\Users\snz\Downloads\20240628001351-backup-xRIWk\20240628001351-backup-xRIWk"); //层级内生成新的压缩包 Path targetPath= sourcePath.resolve("example.zip"); try (var zos = new ZipOutputStream(Files.newOutputStream(targetPath))) { Files.walkFileTree(sourcePath, new SimpleFileVisitor<>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { checkDirectoryTraversal(sourcePath, file); var relativePath = sourcePath.relativize(file); var entry = new ZipEntry(relativePath.toString()); zos.putNextEntry(entry); Files.copy(file, zos); zos.closeEntry(); return super.visitFile(file, attrs); } }); } catch (IOException e) { throw new RuntimeException(e); } }