模拟器中的 Firebase 存储:refFromUrl() 需要一个有效的完整 URL
Posted
技术标签:
【中文标题】模拟器中的 Firebase 存储:refFromUrl() 需要一个有效的完整 URL【英文标题】:Firebase Storage in Emulator: refFromUrl() expected a valid full URL 【发布时间】:2021-10-29 02:50:46 【问题描述】:有没有可能refFromURL()
在本地不工作?
function deleteImage(imageUrl: string)
let urlRef = firebase.storage().refFromURL(imageUrl)
return urlRef.delete().catch((error) => console.error(error))
传递以下网址时:
http://localhost:9199/v0/b/xxx.appspot.com/o/images%2Fdemo%2FHWEGgAPDSZrtMzbil2MwM.image%2Fjpeg?alt=media&token=a7f798ee-056a-4f03-a7bf-8453b71077e6
我收到以下错误:
Uncaught FirebaseError: Firebase Storage: refFromUrl() expected a valid full URL but got an invalid one. (storage/invalid-argument)
【问题讨论】:
【参考方案1】:我也遇到了这个问题,没找到合适的解决办法。
我最终通过在我的应用程序中实施检查以查看 url 是否包含“localhost:9199”来解决它,如果包含,那么它应该按原样提供。如果不是,则表示代码正在生产环境中使用,需要使用 refFromUrl() 解包。
这只是一种解决方法,而不是正确的修复方法。希望其他人能帮助我们!
export default async function getPostInfo(id)
const ref = firestore.collection("posts").doc(id);
const doc = await ref.get();
const imgRef = doc.data().image;
// To handle firebase storage emulator. .refFromURL() doesn't work with locally stored files in the emulator.
let image;
const regex = new RegExp(/localhost:9199/);
if (!regex.test(imgRef))
image = await storage.refFromURL(imgRef).getDownloadURL();
else
image = doc.data().image;
return ...doc.data(), image, id: doc.id ;
【讨论】:
以上是关于模拟器中的 Firebase 存储:refFromUrl() 需要一个有效的完整 URL的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 存储上传适用于模拟器,但不适用于 iPhone
无法将 Firebase Cloud Storage Function 范围限定为本地模拟器上的特定存储桶