我有一个具有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如何保存图像的信息,我的意思是?每当我打开url时,它都不会向我显示图片,而是只会在随机网站上下载该图片并取消其他url的显示。
我有一个窍门。它很容易出错,但是可以肯定地工作:
使用api获取图像的所有网址,并使用node.js在本地进行处理,然后将结果发布到另一个api,然后将其提供给firestore?
答案 0 :(得分:1)
您的代码正在尝试写入:
const FILE = 'file.jpg';
与index.js
存储位置相同的目录中的文件。这(如错误消息所述)是Cloud Functions容器中的只读目录。如果要写入任何文件,它们必须位于/tmp
(也称为tempfs
)中。参见Write temporary files from Google Cloud Function