我正在迭代一个 mongodb 游标并将数据压缩并发送到 S3 对象。尝试使用 解压缩上传的文件gzip -d时,出现以下错误,
gzip: 9.log.gz: invalid compressed data--crc error
gzip: 9.log.gz: invalid compressed data--length error
下面给出了我用于迭代、压缩、上传的代码,
// CursorReader struct acts as reader wrapper on top of mongodb cursor
type CursorReader struct {
Csr *mongo.Cursor
}
// Read func reads the data from cursor and puts it into byte array
func (cr *CursorReader) Read(p []byte) (n int, err error) {
dataAvail := cr.Csr.Next(context.TODO())
if !dataAvail {
n = 0
err = io.EOF
if cr.Csr.Close(context.TODO()) != nil {
fmt.Fprintf(os.Stderr, "Error: MongoDB: getting logs: close cursor: %s", err)
}
return
}
var b bytes.Buffer
w := gzip.NewWriter(&b)
w.Write([]byte(cr.Csr.Current.String() + "\n"))
w.Close()
n = copy(p, []byte(b.String()))
err = nil
return
}
cursor, err := coll.Find(ctx, filter) // runs the find query and returns cursor
csrRdr := new(CursorReader) // creates a new cursorreader instance
csrRdr.Csr = cursor // assigning the find cursor to cursorreader instance
_, err = s3Uploader.Upload(&s3manager.UploadInput{ // Uploading the data to s3 in parts
Bucket: aws.String("bucket"),
Key: aws.String("key")),
Body: csrRdr,
})
如果数据低,那么我没有得到问题。但如果数据很大,那么我就会出错。到目前为止我调试的东西,试图压缩 1500 个文档,每个大小为 15MB,得到错误。即使我尝试将压缩后的字节直接写入本地文件,但我得到了同样的错误。
Helenr
相关分类