настройка файла образа редуктора Google Firestore - PullRequest
0 голосов
/ 04 марта 2020

Следующая функция Google Cloud правильно загружает изображение, но я также хотел бы сжать изображение, чтобы избежать ненужных расходов из-за загрузки больших файлов. Я использую расширение редуктора изображений из Firebase, и оно работает, но проблема в том, что файл изображения больше не отображается в моей пользовательской таблице. Есть ли что-то, что мне нужно настроить в расширении, чтобы URL-адрес изображения в пользовательской таблице был перезаписан уменьшенным изображением ??

exports.uploadImage = (req, res) => {
  const BusBoy = require("busboy")
  const path = require("path")
  const os = require("os")
  const fs = require("fs")


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

  let imageToBeUploaded = {}
  let imageFileName

  busboy.on("file", (fieldname, file, filename, encoding, mimetype) => {
    if (mimetype !== `image/jpeg` && mimetype !== `image/png`) {
      return res.status(400).json({ error: `Not an acceptable file type` })
    }

    // my.image.png => ['my', 'image', 'png']
    const imageExtension = filename.split(".")[filename.split(".").length - 1]
    // 32756238461724837.png
    imageFileName = `${Math.round(
      Math.random() * 1000000000000
    ).toString()}.${imageExtension}`
    const filepath = path.join(os.tmpdir(), imageFileName)
    imageToBeUploaded = { filepath, mimetype }
    file.pipe(fs.createWriteStream(filepath))
  })

  busboy.on("finish", () => {
    admin
      .storage()
      .bucket(config.storageBucket)
      .upload(imageToBeUploaded.filepath, {
        resumable: false,
        metadata: {
          metadata: {
            contentType: imageToBeUploaded.mimetype
          }
        }
      })
      .then(() => {
        const imageUrl = `https://firebasestorage.googleapis.com/v0/b/${config.storageBucket}/o/${imageFileName}?alt=media`
        return db.doc(`/users/${req.user.uid}`).update({ imageUrl })
      })
      .then(() => {
        return res.json({ message: "image uploaded successfully" })
      })
      .catch(err => {
        console.error(err)
        return res.status(500).json({ error: "something went wrong" })
      })
  })
  busboy.end(req.rawBody)
}

1 Ответ

0 голосов
/ 04 марта 2020

Расширение Resize Images обрабатывает только изменение размера изображения в облачном хранилище. Он не обновляет данные в любом другом месте, включая Cloud Firestore. Если вам нужна такая функциональность, вам нужно создать ее самостоятельно.

Также см .:

...