1 回答

TA贡献1860条经验 获得超8个赞
问题似乎是您正在根据压缩的原始文件设置文件信息标头。特别是,它是导致问题的大小 - 如果您尝试写入超过Size标头中值指示的大小,archive/tar.Writer.Write()将返回ErrWriteTooLong- 请参阅https://github.com/golang/go/blob/d5efd0dd63a8beb5cc57ae7d25f9c60d5dea5c65/ src/archive/tar/writer.go#L428-L429
像下面这样的东西应该可以工作,从而文件被解压缩并读取,以便可以建立准确的大小:
// Open file to add to tar
fp, err := os.Open(file_path)
if err != nil {
log.Printf("Error: %v", err)
}
defer fp.Close()
gzr, _ := gzip.NewReader(fp)
if err != nil {
panic(err)
}
defer gzr.Close()
data, err := io.ReadAll(gzr)
if err != nil {
log.Printf("Error: %v", err)
}
// Create tar header for file
header := &tar.Header{
Name: file_name,
Mode: 0600,
Size: int64(len(data)),
}
// Write header to the tar
if err = tw.WriteHeader(header); err != nil {
log.Printf("Error: %v", err)
}
// Write the file content to the tar
if _, err = tw.Write(data); err != nil {
log.Printf("Error: %v", err)
}
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报