我正在尝试从 firebase firestore 获取图像,在尝试获取图像下载 url 时出现以下异常:
W/StorageUtil(10206):没有请求的身份验证令牌
(与此错误类似的问题无法解决问题)
尽管我的安全规则允许读取和写入,但我仍然收到此错误。
有什么想法这有什么问题吗?
获取图片url的代码:
static Future<dynamic> loadImage(BuildContext context, String image) async {
return await FirebaseStorage.instance.ref().child(image).getDownloadURL();
}
Run Code Online (Sandbox Code Playgroud)
调用这个loadImage函数:
Future<Widget> getImage(BuildContext context, String imgName) async {
Image image;
await FireStorageService.loadImage(context, imgName).then((value) {
print(value);
image = Image.network(value.toString(), fit: BoxFit.scaleDown);
return image;
});
}
Run Code Online (Sandbox Code Playgroud)
调用这个 getImage 函数:
child: FutureBuilder(
future: getImage(context, "/images/test1.jpg"),
...
)
Run Code Online (Sandbox Code Playgroud)
我的 firebase 存储规则:
rules_version = '2';
service firebase.storage {
match /images/{imageId} {
allow read,write;
}
}
Run Code Online (Sandbox Code Playgroud)
存储规则ss:
我必须以更好的方式清除异常消息中的十六进制字符。目前它可以手动替换字符,这看起来完全是灾难,如下所示:
\n var clearedStr = str.Replace(Convert.ToString((char)0x01), "")\n .Replace(Convert.ToString((char)0x02), "")\n .Replace(Convert.ToString((char)0x03), "")\n .Replace(Convert.ToString((char)0x04), "")\n .Replace(Convert.ToString((char)0x05), "")\n .Replace(Convert.ToString((char)0x06), "")\n .Replace(Convert.ToString((char)0x07), "")\n .Replace(Convert.ToString((char)0x08), "")\n .Replace(Convert.ToString((char)0x0B), "")\n .Replace(Convert.ToString((char)0x0C), "")\n .Replace(Convert.ToString((char)0x0E), "")\n .Replace(Convert.ToString((char)0x0F), "")\n .Replace(Convert.ToString((char)0x10), "")\n .Replace(Convert.ToString((char)0x11), "")\n .Replace(Convert.ToString((char)0x12), "")\n .Replace(Convert.ToString((char)0x13), "")\n .Replace(Convert.ToString((char)0x14), "")\n .Replace(Convert.ToString((char)0x15), "")\n .Replace(Convert.ToString((char)0x16), "")\n .Replace(Convert.ToString((char)0x17), "")\n .Replace(Convert.ToString((char)0x18), "")\n .Replace(Convert.ToString((char)0x19), "")\n .Replace(Convert.ToString((char)0x1a), "")\n .Replace(Convert.ToString((char)0x1b), "")\n .Replace(Convert.ToString((char)0x1c), "")\n .Replace(Convert.ToString((char)0x1d), "")\n .Replace(Convert.ToString((char)0x1e), "")\n .Replace(Convert.ToString((char)0x84), "")\n .Replace(Convert.ToString((char)0x86), "")\n .Replace(Convert.ToString((char)0x87), "")\n .Replace(Convert.ToString((char)0x88), "")\n .Replace(Convert.ToString((char)0x89), "");\nRun Code Online (Sandbox Code Playgroud)\n例如,带有十六进制字符的消息如下:
\n\n实际上我写了一个正则表达式,但它适用于像 0x1e 这样的十六进制字符,但不适用于其等效字符:
\n但我需要找到这些字符,而不是等效的十六进制字符:
\n"","\xe2\x80\x98","\xc6\x92","","","\xe2\x80\x99","","\xc5\xa1","\xcb\x86" …