如何接收数据并将其保存为二进制文件?

时间:2017-12-28 22:12:25

标签: node.js binary buffer busboy

我正在使用Busboy在我的服务器中解析multipart / form-data,我想将每个文件存储在Buffer中而不自动转换为utf8。有可能吗?

  const result = { files: [] }

  const busboy = new Busboy({
    headers: req.headers
  })

  busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
    const temp = {}

    file.on('data', (data) => {
      temp.file += data
    })

    file.on('end', () => {
      temp.filename = filename
      temp.contentType = mimetype
      result.files = [...result.files, temp]
    })
  })

  busboy.on('field', (fieldname, value) => {
    result[fieldname] = value
  })

  busboy.on('error', (error) => {
    console.error(error)
  })

目前file.on('data')无法正常工作,因为操作+=会自动将缓冲区转换为utf8,因此我将丢失信息。

1 个答案:

答案 0 :(得分:1)

您可以将temp.file设置为数组而不是字符串,最后设置为concat the buffer array

  busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
    const temp = {file: []}

    file.on('data', (data) => {
      temp.file.push(data)
    })

    file.on('end', () => {
      temp.file = Buffer.concat(temp.file)
      temp.filename = filename
      temp.contentType = mimetype
      result.files = [...result.files, temp]
    })
  })