gpt4 book ai didi

node.js - 来自 firebasestorage.googleapis.com 和 storage.googleapis 的媒体链接之间的区别?

转载 作者:行者123 更新时间:2023-12-04 01:36:22 42 4
gpt4 key购买 nike

我需要将图像上传到 Firebase 存储并获取要使用的下载 URL 作为 src对于 <img src=""/>我的网络应用程序中的标签。

当我使用 firebase 将图像从浏览器上传到我的存储桶时客户端 SDK,这就是我所做的:

const fileName = "someImage.jpg";
const storageRef = firebase.storage().ref('my-images/' + fileName);
const uploadTask = storageRef.put(file,metadata); // I GET THE FILE FROM AN <input type="file"/>

这就是我如何获取最近上传文件的下载 URL:

const downloadURL = await uploadTask.snapshot.ref.getDownloadURL();

我得到一个下载 URL,如下所示:

https://firebasestorage.googleapis.com/v0/b/my-project.appspot.com/o/my-images%2FsomeImage.jpg?alt=media


现在我使用 firebase-admin 通过 Node 脚本上传图像,这就是我正在做的:

async function uploadImage() {
const filePath = "./src/assets/someImage.jpg";
const fileName = "someImage.jpg";
const options = {
destination: '/my-images/' + fileName,
public: true,
metadata: {
cacheControl: 'public,max-age=86400,must-revalidate'
}
};
return new Promise((resolve,reject) => {
admin.storage().bucket().upload(filePath,options) // <------ UPLOAD THE IMAGE
.then((file) => resolve(file))
.catch((err) => reject(err));
});
}

uploadImage()
.then((file) => console.log(file)) // <---- THIS LOGS THE RESPONSE
.catch((err) => console.log(err));

这是已登录 .then() 的响应子句:

还有其他日志,但这是重要的部分:

File {
metadata: {
kind: 'storage#object',
id: 'my-project.appspot.com/my-images/someImage.jpg/1576651561918519',
selfLink: 'https://www.googleapis.com/storage/v1/b/my-project.appspot.com/o/my-images%2FsomeImage.jpg',
name: 'my-images/someImage.jpg',
bucket: 'my-project.appspot.com',
generation: '1576651561918519',
metageneration: '1',
contentType: 'image/jpeg',
storageClass: 'STANDARD',
size: '8724',
mediaLink: 'https://storage.googleapis.com/download/storage/v1/b/my-project.appspot.com/o/my-images%2FsomeImage.jpg?generation=157621651561918519&alt=media',
cacheControl: 'public,max-age=86400,must-revalidate',
},

mediaLink 获取下载URL属性:

mediaLink: 'https://storage.googleapis.com/download/storage/v1/b/my-project.appspot.com/o/my-images%2FsomeImage.jpg?generation=157621651561918519&alt=media',

我看到这两个链接都有效src对于我的 <img src="URL"/>标签。

选项 A(来自 firebase 客户端 SDK):

https://firebasestorage.googleapis.com/v0/b/my-project.appspot.com/o/my-images%2FsomeImage.jpg?alt=media

选项 B(来自 firebase-admin SDK):

https://storage.googleapis.com/download/storage/v1/b/my-project.appspot.com/o/my-images%2FsomeImage.jpg?generation=157621651561918519&alt=media

我还注意到我可以访问我用 firebase-admin 上传的文件通过使用相同的 firebasestorage从浏览器上传文件时获得的 API 链接。我只需要替换文件名,例如:

"https://firebasestorage.googleapis.com/v0/b/my-project.appspot.com/o/my-images%2F" + "WHATEVER_FILE_NAME.jpg" + "?alt=media"


问题

选项 A 的链接(使用浏览器上的 firebase SDK 从上传生成)和选项 B 的链接(使用 Node 脚本的 firebase-admin SDK 从上传生成)有什么区别?

最佳答案

云函数中使用的 firebase-admin 没有区别,它会给你一个与 storage 的链接,而如果你从客户端使用 firebase,那么你会获取与 firebasestorage 的链接。

但是这两个选项都会将图像发送到相同的 firebase 存储,这就是为什么您也可以使用 firebasestorage 访问从 firebase admin 上传的图像

关于node.js - 来自 firebasestorage.googleapis.com 和 storage.googleapis 的媒体链接之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59396130/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com