Node.js google云存储对象上的creategunzip()
所以我将JSON格式的备份文件上传到google云存储桶中。服务器是NodeJS。为了节省空间,我想在上传之前压缩文件 我上传文件的功能是:Node.js google云存储对象上的creategunzip(),node.js,google-cloud-storage,zlib,Node.js,Google Cloud Storage,Zlib,所以我将JSON格式的备份文件上传到google云存储桶中。服务器是NodeJS。为了节省空间,我想在上传之前压缩文件 我上传文件的功能是: const bufferStream = new stream.PassThrough() bufferStream.end(Buffer.from(req.file.buffer, 'utf8')) const bucket = storage.bucket('backups') const filename = 'bac
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()
})
当我删除createGunzip()函数时,一切都正常!我甚至可以读取文件的内容,但出于某种原因,我认为这可能不是理想的解决方案。现在,为了测试,我有最大文件大小为50kB的文件,但在生产环境中可能会得到大于10Mb的文件
createGunzip()函数是否需要缓冲区?还是有其他问题
谢谢 根据您的对象是否正确压缩和上载,
然后返回的对象将被自动解压缩,这就是为什么在您的案例中不需要压缩
如果您希望按原样接收文件,则应在请求中包含
Accept Encoding:gzip
标题。谢谢。我没有在文档中看到这一点。谢谢你查阅!
Error: incorrect header check
Errno: 3
code: Z_DATA_ERROR