如何使用Firebase云function存储制作文件夹

我怎样才能使文件夹“职位”?

存储桶 – > 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目录,云function还有一个只读文件系统。 你需要让你的/posts目录像/tmp/posts可以创build目录或写入。 你也可以使用像node-tmp这样的东西来更容易地pipe理临时文件/目录的创build。

工作代码如下所示:

 //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