Как отправить данные FormData и JSON на busboy, используя axios - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь использовать ту же функцию для загрузки изображений на мой сервер и сохраняю URL изображения в зависимости от переменной req.body.location ... Я использую busboy для обработки файла ... Однако мне не удается чтобы отправить правильный запрос на сервер с топором ios Как вы можете видеть в коде, я отправляю почтовый запрос с formData и местоположением (formdata is formData obj). Я не понимаю, где именно busboy получает formdata и если я отправлю действительный запрос? какие-либо предложения?

       try {
        await axios({
          method: 'POST',
          URL: '.../api/uploadImage'
          data: {
            form: formData,
            location: 'profile'
           }
        })
      } catch (err) {
        console.log(err.response.data)
      }

    exports.uploadImage = (req, res) => {
  **// What should I do here?**
  const busboy = new BusBoy({ headers: req.headers })
  const imageLocation = req.body.location
  let imageFileName
  let imageToUpload
  busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
    if (
      mimetype !== 'image/jpeg' &&
      mimetype !== 'image/jpg' &&
      mimetype !== 'image/png' &&
      mimetype !== 'image/svg'
    ) {
      return res.status(400).json({
        status: 'error',
        message: 'Wrong file submitted',
      })
    }
    const imageExtension = filename.split('.')[filename.split('.').length - 1]
    imageFileName = `${Math.round(
      Math.random() * 1000000000000
    ).toString()}.${imageExtension}`
    const filePath = path.join(os.tmpdir(), imageFileName)
    imageToUpload = {
      filePath,
      mimetype,
    }
    file.pipe(fs.createWriteStream(filePath))
  })
  busboy.on('finish', () => {
    admin
      .storage()
      .bucket()
      .upload(imageToUpload.filePath, {
        resumable: false,
        metadata: {
          metadata: {
            contentType: imageToUpload.mimetype,
          },
        },
      })
      .then(() => {
        const imageUrl = `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/${imageFileName}?alt=media`
        **// I know its updating the same location... doesn't matter right now =)**
        if (imageLocation === 'profile') db.doc(`/users/${req.user.usernameId}`).update({ imageUrl })
        if (imageLocation === 'hero') db.doc(`/users/${req.user.usernameId}`).update({ imageUrl })
      })
      .then(() => {
        return res.status(201).json({
          status: 'success',
          data: 'Image uploaded successfully',
        })
      })
      .catch((err) => {
        res.status(500).json({
          status: 'error',
          error: err.code,
        })
      })
  })
  busboy.end(req.rawBody)
}
...