如何从firebase函数中的firebase存储中获取图像的尺寸?
Posted
技术标签:
【中文标题】如何从firebase函数中的firebase存储中获取图像的尺寸?【英文标题】:How to get the dimensions of an image from firebase storage in firebase functions? 【发布时间】:2019-10-15 15:48:18 【问题描述】:我有一个具有 Firebase 后端的应用。当我制作时,我并没有考虑图像的尺寸,好像它们将来会有用,所以我只是保持图像原样并将它们的 URL 保存在 Firestore 中。
但现在我需要图像的尺寸才能将它们展示给用户,所以我想制作一个我将只执行一次的功能,以便在 Firestore 中设置具有尺寸的文件,并且我还将添加一些客户端代码以便在上传之前获取尺寸。
所以我几乎尝试了所有方法来获取函数中的文件尺寸,但无法做到。
示例[摘要代码]
此代码在 node.js 中有效,但在 firebase 函数中失败
const fs = require('fs')
const request = require('request')
import sizeOf from 'image-size'
const FIRE = 'https://firebasestorage.googleapis.com/file....'
const FILE = 'file.jpg';
request.head(FIRE, (err, res, body) =>
request(FIRE)
.pipe(fs.createWriteStream(FILE))
.on('close', () =>
sizeOf(FILE, (err1, dimensions) =>
const result =
"width": dimensions.width,
"height": dimensions.height
console.log(dimensions.width, dimensions.height);
fs.unlinkSync(FILE);
response.setHeader('Content-Type', 'application/json');
const responseData =
'Error': false,
'Message': "result : " + result
;
response.send(JSON.stringify(responseData));
)
)
)
如果有人对此有所了解,请帮助我!
此外还告诉我firebase如何保存图像,我的意思是以什么方式?每当我打开网址时,它不会向我显示图像,而是下载图像,取消随机网站上的其他网址。
我有一个诀窍。它很容易出错,但肯定会工作:
使用 api 获取图像的所有 url,并使用 node.js 在本地执行操作并将结果发布到另一个 api,然后将数据提供给 firestore?
【问题讨论】:
"fails in firebase functions" 当您在 Cloud Functions 中运行此代码时,它会出现什么故障?有错误信息吗?您是否尝试添加额外的日志记录以查看哪条精确的线路失败了?你在读什么图?有多大? @FrankvanPuffelen 这是错误 => 错误:EROFS:只读文件系统,打开“file.jpg”,我认为这是因为 fs[文件系统] 仅适用于我认为的服务器 甚至在此之前,我也曾遇到过这样的问题,但用例不同。例如,在这种情况下,firebase 函数无法在某处处理数据并将其保留一段时间。函数无法将文件保存在系统中,以便我可以对其进行一些操作 如果要写入文件,需要写入/tmp
(也称为tempfs
)。见***.com/questions/42719793/…
【参考方案1】:
您的代码正在尝试写入:
const FILE = 'file.jpg';
这是与您的 index.js
存储位置相同的目录中的文件。这是(如错误消息所述)Cloud Functions 容器中的只读目录。如果要写入任何文件,它们必须在/tmp
(也称为tempfs
)中。见Write temporary files from Google Cloud Function
【讨论】:
以上是关于如何从firebase函数中的firebase存储中获取图像的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用firebase_admin从python中的firebase存储下载文件
有没有办法从 Firebase 云函数中的单个函数返回 2 个值并将它们存储在数据库中的不同节点中?