如何使用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
- Google Cloud函数中APIdevise的最佳方法?
- Firebase倒数计时器跨多个客户端同步
- 是否可以在本地testingFirebase触发器?
- 在GAE Flex上禁用使用admin SDK node.jsloggingFirebase数据库
- Google App Engine – 节点:无法find模块“firebase-admin”
- angular/离子处理成功200作为一个错误
- 调整图像大小并上传到服务器返回错误代码
- 从使用Cloud Functions for Fire上传的文件获取下载url
- Firebase手电筒 – Bonsai-ElasticSearch API调用来执行search