google 云存储对象上的 creategunzip()
creategunzip() on google cloud storage object
所以我正在将 JSON 格式的备份文件上传到 google 云存储桶。服务器是 NodeJS。为了保存space,我想在上传前压缩文件。
我上传文件的函数是:
const bufferStream = new stream.PassThrough()
bufferStream.end(Buffer.from(req.file.buffer, 'utf8'))
const bucket = storage.bucket('backups')
const filename = 'backup.json.gz'
const file = bucket.file(filename)
const writeStream = file.createWriteStream({
metadata: {
contentType: 'application/json',
contentEncoding: 'gzip'
},
validation: "md5"
})
bufferStream.pipe(zlib.createGzip()).pipe(writeStream).on('finish', async () => {
return res.status(200).end()
})
这个功能有效。我在下载时遇到解压问题。我这里的功能是:
const bucket = storage.bucket('backups')
let backup = ''
const readStream = bucket.file('backup.json.gz').createReadStream()
readStream.pipe(zlib.createGunzip()) // <-- here
readStream.on('data', (data) => {
backup += data
})
readStream.on('end', () => {
res.status(200).send(backup).end()
})
当我使用下载功能时,出现以下错误:
Error: incorrect header check
Errno: 3
code: Z_DATA_ERROR
当我删除 createGunzip() 函数时,一切正常!我什至可以读取文件的内容,但出于某种原因,我认为这可能不是理想的解决方案。现在,为了测试,我有最大的文件。文件大小 50kB,但在生产中可能会得到大于 10Mb 的文件。
createGunzip() 函数是否需要缓冲区?还是有其他问题?
谢谢!
根据 the documentation 如果您的 object 已正确压缩和上传,
然后返回的 object 将自动解压缩,这就是为什么在您的情况下不需要压缩。
如果您想接收文件 as-is,那么您应该在请求中包含 Accept-Encoding: gzip
headers。
所以我正在将 JSON 格式的备份文件上传到 google 云存储桶。服务器是 NodeJS。为了保存space,我想在上传前压缩文件。
我上传文件的函数是:
const bufferStream = new stream.PassThrough()
bufferStream.end(Buffer.from(req.file.buffer, 'utf8'))
const bucket = storage.bucket('backups')
const filename = 'backup.json.gz'
const file = bucket.file(filename)
const writeStream = file.createWriteStream({
metadata: {
contentType: 'application/json',
contentEncoding: 'gzip'
},
validation: "md5"
})
bufferStream.pipe(zlib.createGzip()).pipe(writeStream).on('finish', async () => {
return res.status(200).end()
})
这个功能有效。我在下载时遇到解压问题。我这里的功能是:
const bucket = storage.bucket('backups')
let backup = ''
const readStream = bucket.file('backup.json.gz').createReadStream()
readStream.pipe(zlib.createGunzip()) // <-- here
readStream.on('data', (data) => {
backup += data
})
readStream.on('end', () => {
res.status(200).send(backup).end()
})
当我使用下载功能时,出现以下错误:
Error: incorrect header check
Errno: 3
code: Z_DATA_ERROR
当我删除 createGunzip() 函数时,一切正常!我什至可以读取文件的内容,但出于某种原因,我认为这可能不是理想的解决方案。现在,为了测试,我有最大的文件。文件大小 50kB,但在生产中可能会得到大于 10Mb 的文件。
createGunzip() 函数是否需要缓冲区?还是有其他问题?
谢谢!
根据 the documentation 如果您的 object 已正确压缩和上传, 然后返回的 object 将自动解压缩,这就是为什么在您的情况下不需要压缩。
如果您想接收文件 as-is,那么您应该在请求中包含 Accept-Encoding: gzip
headers。