我有一个云函数,可以为上传的每个图像生成一组调整大小的图像。这是通过 onFinalize()
钩子触发的。
调整上传图像大小的云函数:
export const onImageUpload = functions
.runWith({
timeoutSeconds: 120,
memory: '1GB'
})
.storage
.object()
.onFinalize(async object => {
const bucket = admin.storage().bucket(object.bucket)
const filePath = object.name
const fileName = filePath.split('/').pop()
const bucketDir = dirname(filePath)
const workingDir = join(tmpdir(), 'resizes')
const tmpFilePath = join(workingDir, fileName)
if (fileName.includes('resize@') || !object.contentType.includes('image')) {
return false
}
await fs.ensureDir(workingDir)
await bucket.file(filePath).download({
destination: tmpFilePath
})
const sizes = [
500,
1000
]
const uploadPromises = sizes.map(async size => {
const resizeName = `resize@${size}_${fileName}`
const resizePath = join(workingDir, resizeName)
await sharp(tmpFilePath)
.resize(size, null)
.toFile(resizePath)
return bucket.upload(resizePath, {
destination: join(bucketDir, resizeName)
})
})
// I need to now update my Firestore database with the public URL.
// ...but how do I get that here?
await Promise.all(uploadPromises)
return fs.remove(workingDir)
})
这很好,也很有效,但是我还需要以某种方式检索这些图片的公共URL,以便将这些值写入我的Firestore。
我可以在前端使用< code>getDownloadURL()来完成这项工作,但是我不确定如何从新生成的图像的云函数中完成这项工作。
在我看来,这无论如何都需要在后端发生,因为我的前端无法知道图像何时被处理。
仅适用于客户端:
const storageRef = firebase.storage().ref()
const url = await storageRef.child(`images/${image.name}`).getDownloadURL()
有什么想法吗?
回答(带警告):
下面@sergio从技术上正确地回答了这个问题,但我只想指出在它能够工作之前需要做的一些额外的事情。
> < li>
根据TypeScript,< code>getSignedUrl()的“expires”参数似乎必须是一个数字。因此,为了让它工作,我必须传递一个用纪元(毫秒)表示的未来日期,比如< code>3589660800000。
我需要将凭据传递给admin.initializeApp()
才能使用此方法。您需要在Firebase管理员中生成服务号密钥。请参阅此处:https://firebase.google.com/docs/admin/setup?authuser=1
希望这也能帮助其他人。
我相信从桶上传返回的promise包含对文件的引用,然后您可以使用它来获取签名的URL。
类似的东西(未经测试):
const data = await bucket.upload(resizePath, { destination: join(bucketDir, resizeName) });
const file = data[0];
const signedUrlData = await file.getSignedUrl({ action: 'read', expires: '03-17-2025'});
const url = signedUrlData[0];
我有一张图片上面有文字。我需要从图像中提取文本。 例如:假设我有一个图像,在图像之上我有一个标志“诺基亚”。我想从图像中提取作为文本的徽标。
我是的新手。我想知道是否可以下载所有手动上传的图片?我搜索了这个主题,但我发现,我需要图像并将其保存在中,但在这种情况下,如果我以编程方式上传它。还有别的办法吗?因为我想手动上传。
问题内容: 是否有显示大图像并允许用户放大和缩小和平移图像的通用方法? 到目前为止,我发现了两种方法: 覆盖ImageView,对于这样一个常见问题似乎有点过多。 使用网络视图,但对整体布局的控制较少等。 问题答案: 更新 我刚刚给TouchImageView进行了新的更新。现在,除了“平移”和“缩放”缩放外,还包括“双击缩放”和“缩放”。下面的代码是非常过时。您可以签出github项目以获取最新
我正在尝试用WordPress高级自定义字段和repeater字段插件构建一个简单的图库。我需要显示一个缩略图,你点击放大主图像(我使用的是Fancybox)。有人知道WordPress自动生成的图像缩略图的链接是否可能吗? 我可以得到主要的图像链接: /wp-content/uploads/2014/12/slide1.jpg 但需要获取此图像链接: /wp-content/uploads/20
我找了很久,但不幸的是一无所获,所以我问:我是怎么做到的? 我想改变我的网站的形象,如果你用skype或WhatsApp发送! [黄色框中的图片!]
问题内容: 我已经阅读了有关如何使用OpenCV的基于HOG的行人检测器的文章: 如何使用OpenCV检测和跟踪人员? 我想使用HOG来检测图像中的其他类型的对象(不仅仅是行人)。但是, HOGDetectMultiScale 的Python绑定似乎无法提供对实际HOG功能的访问。 是否可以使用Python + OpenCV直接从任何图像中提取HOG功能? 问题答案: 如果您想要用于HOG功能的快