如何使用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
- FireStore – TypeError:k.setTimeout不是一个函数
- 试图访问实时数据库时,Firebase Node.jspipe理SDK超时
- 云function“event =>”文档
- Firebase提供了一个“0”而不是实际的variables内容
- 迁移到新控制台后,Firebase部署被破坏 – “错误:需要身份validation”。
- Firebase的JavaScript承诺在NodeJS
- Firebase .orderByChild()。equalTo()。once()。then()当孩子不存在时承诺
- SyntaxError:意外的标记'const' – 尽pipe我取代了const
- Firebase Init第二次只创build2个文件