簡體   English   中英

如何使用Firebase雲功能存儲創建文件夾

[英]How can make folder with Firebase Cloud Functions Storage

如何制作文件夾“帖子”?

bucket - > gs://app.appspot.com/posts

exports.generateThumbnail = functions.storage.object()
  .onChange(event => {
    const object = event.data
    const filePath = object.name
    const fileName = filePath.split('/').pop()
    const fileBucket = object.bucket;
    const bucket = gcs.bucket(fileBucket)
    const tempFilePath = `/posts/${fileName}`

    return bucket.file(filePath).download({
      destination: tempFilePath
    })
    .then(() => {
      console.log('image downloaded locally to', tempFilePath)
      return spawn('convert', [tempFilePath, '-thumbnail', '400x400>', tempFilePath])
    })
    .then(() => {
      console.log('thumbnail created')
      // match end of string that contains a slash followed by 0 or more characters that are not a slash:
      const thumbFilePath = filePath.replace(/(\/)?([^\/]*)*/, '$1thumb_$2')
          console.log('afoter=thumbFilePath=='+thumbFilePath);
      return bucket.upload(tempFilePath, {
        destination: thumbFilePath
      })
    })

  });

錯誤

錯誤:EROFS:只讀文件系統,打開'/posts/image.jpg'?

除了/tmp目錄之外,Cloud Functions具有只讀文件系統。 您需要使/tmp/posts類的/posts目錄能夠創建目錄或寫入。 您還可以使用node-tmp之類的東西來更輕松地管理臨時文件/目錄的創建。

工作代碼如下:

//add 3 package
const path = require('path');
const os = require('os');
const fs = require('fs');


exports.generateThumbnail = functions.storage.object()
  .onChange(event => {

  const object = event.data; 
  const fileBucket = object.bucket; 
  const filePath = object.name; 
  const contentType = object.contentType; 
  const resourceState = object.resourceState; 
  const metageneration = object.metageneration; 

  const bucket = gcs.bucket(fileBucket);
  const tempFilePath = path.join(os.tmpdir(), fileName);
  return bucket.file(filePath).download({
    destination: tempFilePath
  }).then(() => {
    console.log('Image downloaded locally to', tempFilePath);
    // Generate a thumbnail using ImageMagick.
    return spawn('convert', [tempFilePath, '-thumbnail', '400x400>', tempFilePath]);
  }).then(() => {
    console.log('Thumbnail created at', tempFilePath);
    // We add a 'thumb_' prefix to thumbnails file name. That's where we'll upload the thumbnail.
    const thumbFileName = `thumb_${fileName}`;
    const thumbFilePath = path.join(path.dirname(filePath), thumbFileName);
    // Uploading the thumbnail.
    return bucket.upload(tempFilePath, {destination: thumbFilePath});
  // Once the thumbnail has been uploaded delete the local file to free up disk space.
  }).then(() => fs.unlinkSync(tempFilePath));

  });

成功 - > / tmp / posts - > gs://app.appspot.com/posts

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM