将 base64 上传到 firebase 存储并取回下载 url
Posted
技术标签:
【中文标题】将 base64 上传到 firebase 存储并取回下载 url【英文标题】:Uploading base64 to the firebase storage and getting back the download url 【发布时间】:2021-12-27 04:25:21 【问题描述】:调用的第一个函数是addPostHandler,它调用函数storeImage。在 storeImage 函数内部, postData.postImage 是字符串数组(图像转换为 base64)。我在这里要做的是映射 postData.postImage 中的所有图像,然后将其上传到 firestore,然后获取下载 Url 并将其推送到 imageUrl。在我完成上传所有图像并获取 URL 后,最后我希望 console.log("Printing....") 运行。
错误是 storeImage 函数返回的是空字符串而不是 downloadUrl。
const index = () =>
const storeImage = async (postData: PostType) =>
const imageUrl: string[] = [];
const storage = getStorage();
postData.postImage.map((image, i) =>
const storageRef = ref(
storage,
`ImagesOfPosts/$postData.userId/$postData.postId/image $i`
);
uploadString(storageRef, image, "data_url",
contentType: "image/jpg",
).then(() =>
getDownloadURL(storageRef)
.then((result) =>
imageUrl.push(result);
)
.catch((error) =>
console.error(error);
);
);
);
console.log(imageUrl);
return imageUrl;
;
const addPostHandler = async (enteredPostData: PostType) =>
const imageUrl = await storeImage(enteredPostData);
console.log("Printing.......");
【问题讨论】:
【参考方案1】:您的***代码不会等到上传和获取下载 URL 完成,因此您会看到它返回一个空数组。
由于您要上传多张图片,因此您需要使用Promise.all()
来仅在所有图片完成后解析storeImage
。
总共会是这样的:
const storeImage = async (postData: PostType) =>
const storage = getStorage();
const imageUrl = Promise.all(postData.postImage.map((image, i) =>
const storageRef = ref(
storage,
`ImagesOfPosts/$postData.userId/$postData.postId/image $i`
);
return uploadString(storageRef, image, "data_url",
contentType: "image/jpg",
).then(() =>
return getDownloadURL(storageRef);
);
);
return imageUrl;
;
【讨论】:
以上是关于将 base64 上传到 firebase 存储并取回下载 url的主要内容,如果未能解决你的问题,请参考以下文章
仅使用云功能的 Firebase 存储 svg 上传不起作用 其他格式可以使用 base64
如何将 Firebase 上传图片的图片下载 URL 转换为 base64
Firebase 存储:字符串与格式“base64”不匹配:发现无效字符
从 Expo 的缓存中以 base64 格式读取文件,写入 Firebase 存储(Cloud Storage for Firebase)