Closed iawia002 closed 1 year ago
/lgtm
/cc @wansir
LGTM
just one comment, the targz file ([]byte) is not needed to save as file, can be directly parsed using the tar module. e.g.
func (u *S3Service) UploadFilesInTgz(ctx context.Context, tgz io.Reader, prefix string, parent string, acl string) error {
if u.err != nil {
return u.err
}
uncompressedStream, err := gzip.NewReader(tgz)
if err != nil {
return err
}
tarReader := tar.NewReader(uncompressedStream)
var header *tar.Header
for header, err = tarReader.Next(); err == nil; header, err = tarReader.Next() {
if header.Typeflag == tar.TypeReg && strings.HasPrefix(header.Name, prefix) && header.Size > 0 {
var buf []byte
var size int64
buffer := bytes.NewBuffer(buf)
size, err = io.Copy(buffer, tarReader)
if err != nil && err != io.EOF {
return err
}
if size != header.Size {
return io.ErrUnexpectedEOF
}
err = u.Upload(ctx, header.Name, buffer, parent, acl)
if err != nil {
return err
}
}
}
if err != nil && err != io.EOF {
return err
}
return nil
}
Usage example:
ref https://github.com/kubesphere/issues/issues/1097 https://github.com/kubesphere/issues/issues/1024