Сжатие файла, загруженного из Multer, с использованием Nodejs Zlib - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь сжать загруженный файл, используя nodejs zlib. Сжатие работает, но при попытке его распаковки возникает ошибка. Я создал маршрут сжатия, который представляет собой почтовый запрос на загрузку файла для сжатия:

app.post('/compress', upload.single('file'), (req, res) => {
  try {
    var streamInstance = new stream.Readable();
    const destination = createWriteStream(`compressed/${req.file.originalname}.gz`);
    const source = streamInstance.push(Buffer.from(JSON.stringify(req.file)))
    res.json(source)
    streamInstance.push(null);
    pipeline(source, gzip, destination, (err, file) => {
      if (err) {
        console.log(err)
        return res.json('An error occurred:', err);
      } else {
        console.log({
          file: file
        })
        return res.json(file)

      }
    })
  } catch (err) {
    console.log(err)
    res.json(err)
  }
})

Это добавляет сжатый файл в сжатый каталог, но при попытке его распаковки возникает ошибка.

Есть ли другой метод, который я мог бы использовать для сжатия этого файла с помощью zlib?

1 Ответ

0 голосов
/ 11 августа 2020

Multer дает возможность использовать метод memoryStorage. Таким образом, вы можете получить фактический буфер этого файла. С его помощью вы можете использовать это:


var storage = multer.memoryStorage()
var upload = multer({
  storage: storage
})

app.post('/compress', upload.single('file'), async (req, res) => {
  try {
    const destination = `compressed/${req.file.originalname}.gz`;
    await zlib.gzip(req.file.buffer, async (err, response) => {
      if (err) {
        return res.status(500).json({error:err})
      } else {
        await fs.appendFile(path.join(__dirname,destination), response, (err, data) => {
          if (err) {
            return res.status(500).json({error:err})
          } else {
            res.download(path.join(__dirname,destination),`${req.file.originalname}.gz`);
          }
        })
      }
    })
  } catch (err) {
    console.log(err)
    res.json(err)
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...