Я пытаюсь вытащить файлы из экземпляра хранилища файлов MinIO, заархивировать файлы и скопировать zip-файлы обратно в minio. Я получил большую часть его работы, но по какой-то причине ZIP-файл, который попадает в хранилище, поврежден, например, file testzip.zip
показывает, что это ZIP-файл, но разархивирование не работает:
Archive: somerandomname.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of somerandomname.zip or
somerandomname.zip.zip, and cannot find somerandomname.zip.ZIP, period.
Это код
func testThis() error {
pipeReader, pipeWriter := io.Pipe()
zipWriter := zip.NewWriter(pipeWriter)
wg := sync.WaitGroup{}
wg.Add(2)
go func() {
defer wg.Done()
defer zipWriter.Close()
defer pipeWriter.Close()
header := &zip.FileHeader{
Name: "testzip.zip",
Method: zip.Deflate,
ModifiedTime: uint16(time.Now().UnixNano()),
ModifiedDate: uint16(time.Now().UnixNano()),
}
fw, err := zipWriter.CreateHeader(header)
if err != nil {
fmt.Println("err")
}
object, err := minioClient.GetObject("test", "somekey", minio.GetObjectOptions{})
if err != nil {
fmt.Println("err", err)
}
if _, err := io.Copy(fw, object); err != nil {
fmt.Println(err)
}
}()
go func() {
defer wg.Done()
if _, err := io.Copy(os.Stdout, pipeReader); err != nil {
fmt.Println("err", err)
}
_, err := minioClient.PutObject("test", "testzip.zip", pipeReader, -1, minio.PutObjectOptions{})
if err != nil {
fmt.Println(err)
}
}()
wg.Wait()
return nil
}
Любая помощь будет принята с благодарностью