作者:厉害了 | 来源:互联网 | 2023-02-13 14:48
我正在使用firebase存储来为我的Android应用程序上的用户存储和加载图像.在使用之前,必须对所有用户进行身份验证.有时,某些用户个人资料图像未显示并抛出"403 Forbidden"错误.那些图像在显示之前,我不知道他们为什么停止工作.我在我的firebase存储上使用以下规则:
service firebase.storage {
match /b/.appspot.com/o {
match /{allPaths=**} {
allow read: if request.auth != null;
allow write: if request.auth != null;
}
}
}
如果我改变读取规则, allow read;
所有图像都正常工作.这是我的显示方法:
Picasso.Builder builder = new Picasso.Builder(this);
builder.listener(new Picasso.Listener()
{
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception)
{
exception.printStackTrace();
}
});
builder.build().load(URL).into(imgView);
图像URL看起来像这样:
https://firebasestorage.googleapis.com/v0/b/.appspot.com/o/images%2Fprofile%2Fphoto%2F36805?alt=media&token=e62ec151-3aaf-4e5c-aefb-1b3c93828684
它可能与令牌有关吗?
1> user2555964..:
可能来得太晚了,但也许对其他人有帮助.我遇到了同样的问题,我的问题是firebase存储中的文件名是唯一的.如果您上传一个具有相同文件名的新文件,它将覆盖旧文件并为其生成新标记,使旧网址过时.您应该为上传的文件生成唯一的文件名,然后应该修复它.
我只是将当前时间戳附加到文件名.
2> Chris Herbst..:
如果文件扩展名不正确或丢失,则会出现以下错误:
{
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}
在您提供的图像URL中,图像名称后没有该图像的扩展名。
我已经使用自己的网址之一进行了测试,可以正常工作(可以测试):https :
//firebasestorage.googleapis.com/v0/b/training-a0a3e.appspot.com/o/penguin-56101_640.jpg?alt=media&token = 8dfb913d-e2f3-4956-bd3a-2c3746d0d6d3
但是,当删除.jpg时:https : //firebasestorage.googleapis.com/v0/b/training-a0a3e.appspot.com/o/penguin-56101_640? alt = media & token = 8dfb913d-e2f3-4956-bd3a-2c3746d0d6d3
收到以下响应:
{
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}