Node.js 如何使用firebase功能处理刮取的图像并上载到firebase存储?

Node.js 如何使用firebase功能处理刮取的图像并上载到firebase存储?,node.js,firebase,google-cloud-storage,google-cloud-functions,firebase-storage,Node.js,Firebase,Google Cloud Storage,Google Cloud Functions,Firebase Storage,我试图从URL抓取一些高清图像,调整它们的大小并上传到存储器 到目前为止,我已经得到了图像,并使用。夏普公司使用.toFile('output.jpg')或.toBuffer(),我不知道如何从这里开始。输出图像并将其上载到firebase存储的最简单方法是什么 到目前为止,我的代码是: const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializ

我试图从URL抓取一些高清图像,调整它们的大小并上传到存储器

到目前为止,我已经得到了图像,并使用。夏普公司使用
.toFile('output.jpg')
.toBuffer()
,我不知道如何从这里开始。输出图像并将其上载到firebase存储的最简单方法是什么

到目前为止,我的代码是:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

const request = require('request').defaults({ encoding: null });
const sharp = require('sharp');

exports.copyThumbnailImage = functions.firestore.document('users/{userId}/vocab/{vocabId}').onCreate((snapshot, context) => {
  // mock: copyThumbnailImage({ chosenImages: [{ googleThumbnailUrl: "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQlC7Vnu9CuZlA-nTpW8TLPd8dAE456LCpeXoadUKHoxB7WEmM1rfahqsfr", mime: "image/jpeg", originalUrl: "https://storage.tenki.jp/storage/static-images/suppl/article/image/2/27/278/27810/1/large.jpg" }] }, { params: { userId: 'zYCw6DmcEiOS8Yk4QltYPikykwP2', vocabId: 1420970 } })
  const data = snapshot.data()
  const vocabId = context.params.vocabId
  const images = data.chosenImages

  const checkExistencePromises = []
  // Promises check if image ref already exists in firestore
  images.forEach(imageObj => {
    checkExistencePromises.push(db.collection('userImages').where('originalUrl', '==', imageObj.originalUrl).where('vocabId', '==', vocabId).get())
  })

  return Promise.all(checkExistencePromises)
    .then(snapshots => {
      const getImagePromises = []
      snapshots.forEach((snapshot, i) => {
        if (snapshot.empty) {
          // if image doesn't exist already, upload thumbnail to DB, add doc to userImages and add link to review
          const originalUrl = images[i].originalUrl
          getImagePromises.push(getImage(originalUrl))
        } else {
          // add link to review
        }
      })

      return Promise.all(getImagePromises)
    })
    .then(responses => {
      responses.forEach(response => {
        sharp(response).resize(200, 200).toBuffer()
        // ????????
      })
    })
    .then(() => {
    })
    .catch(error => {
      console.log(error)
    })
})

function getImage (url) {
  return new Promise((resolve, reject) => {
    request.get(url, (err, res, body) => {
      if (err) reject(err)
      resolve(body)
    })
  })
}

您可以将其保存到本地文件系统(本地
/tmp
磁盘)并从那里上传到云存储

请查看此官方云功能示例:。(我复制以下代码以备将来参考)

特别是,看看他们是如何用

return spawn('convert', [tempLocalFile, tempLocalJPEGFile]);
以及他们是如何上传的:

return bucket.upload(tempLocalJPEGFile, {destination: JPEGFilePath});
在您的情况下,您将调用

.toFile(-theTemporaryFielName-)
最后,看一看
/tmp
磁盘

自2018年1月8日起的云功能示例代码(以上链接)


您可以将其保存到本地文件系统(本地
/tmp
磁盘)并从那里上传到云存储

请查看此官方云功能示例:。(我复制以下代码以备将来参考)

特别是,看看他们是如何用

return spawn('convert', [tempLocalFile, tempLocalJPEGFile]);
以及他们是如何上传的:

return bucket.upload(tempLocalJPEGFile, {destination: JPEGFilePath});
在您的情况下,您将调用

.toFile(-theTemporaryFielName-)
最后,看一看
/tmp
磁盘

自2018年1月8日起的云功能示例代码(以上链接)

谢谢我使用
require('os').tmpdir()
获取临时文件夹路径,然后使用
functions.storage().bucket('APPNAME.appspot.com').upload()将文件写入数据库,谢谢。我使用
require('os').tmpdir()
获取临时文件夹路径,然后使用
functions.storage().bucket('APPNAME.appspot.com').upload()将文件写入数据库