creategunzip () в облачном хранилище Google - PullRequest
0 голосов
/ 19 апреля 2020

Итак, я загружаю файлы резервных копий в формате JSON в облачное хранилище Google. Сервер NodeJS. Чтобы сэкономить место, я хочу сжать файлы перед загрузкой.

Моя функция загрузки файла:

    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 (), все работает! Я даже могу прочитать содержимое файла, но по некоторым причинам я думаю, что это может быть не идеальным решением. Теперь для тестирования у меня есть файлы с макс. размер файла 50 КБ, но, вероятно, получит файлы> 10 МБ в рабочем состоянии.

Ожидает ли функция createGunzip () буфер? Или что-то еще не так?

Спасибо!

1 Ответ

1 голос
/ 22 апреля 2020

В соответствии с документацией , если ваши объекты сжаты и загружены должным образом, возвращаемый объект будет автоматически распакован, поэтому в вашем случае не требуется распаковка.

Если вы хотите Получите файл как есть, тогда вы должны включить в свой запрос Accept-Encoding: gzip заголовки.

...