halo icon indicating copy to clipboard operation
halo copied to clipboard

halo备份文件下载后若解压再压缩无法进行恢复,除非使用代码重新压缩

Open dokisekai opened this issue 8 months ago • 0 comments

系统信息

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); } }

dokisekai avatar Jun 28 '24 08:06 dokisekai