1 回答

TA貢獻1860條經驗 獲得超8個贊
問題似乎是您正在根據壓縮的原始文件設置文件信息標頭。特別是,它是導致問題的大小 - 如果您嘗試寫入超過Size標頭中值指示的大小,archive/tar.Writer.Write()將返回ErrWriteTooLong- 請參閱https://github.com/golang/go/blob/d5efd0dd63a8beb5cc57ae7d25f9c60d5dea5c65/ src/archive/tar/writer.go#L428-L429
像下面這樣的東西應該可以工作,從而文件被解壓縮并讀取,以便可以建立準確的大?。?/p>
// 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 關注
- 137 瀏覽
添加回答
舉報