如何捕获Firebase Storage因文件大小超限触发的上传拒绝错误?
解决Firebase Storage上传大小限制的错误监听问题
嘿,我发现你的问题根源出在Firebase Storage规则的配置上,咱们一步步来解决:
1. 修正Storage规则的权限逻辑
你当前的规则把文件大小限制放在了read权限判断里,但上传操作属于write权限范畴,所以这个限制根本不会在上传时触发!这就是为什么超出大小的文件被拒绝后,你拿不到对应错误信息的核心原因。
把规则修改为以下内容,将大小限制移到allow write的条件中:
service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow write: if request.auth != null && request.resource.size < 20 * 1024 * 1024; allow read: if request.auth != null; } } }
这里的request.resource代表即将上传的文件资源,在写入权限里判断它的大小,就能在文件超过20MB时直接拒绝上传请求,让客户端的错误监听器能捕获到对应的异常。
2. 优化客户端的错误处理逻辑
即使规则修正后,直接打印e.getMessage()可能会得到不够友好的提示,建议你针对性解析Firebase的StorageException,根据错误码给出更清晰的用户提示:
修改你的OnFailureListener代码:
.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { if (e instanceof StorageException) { StorageException storageException = (StorageException) e; int errorCode = storageException.getErrorCode(); String errorMsg = storageException.getMessage(); // 针对文件过大的错误给出明确提示 if (errorCode == StorageException.ERROR_OBJECT_TOO_LARGE) { Toast.makeText(getContext(), "上传失败:文件大小超过20MB限制", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getContext(), "上传失败:" + errorMsg, Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(getContext(), "上传失败:" + e.getMessage(), Toast.LENGTH_SHORT).show(); } } })
这样当文件超出限制时,用户会收到清晰的提示,而不是模糊的错误信息。
完成以上两步后,再测试上传超大文件,就能正常触发错误监听并获取准确的错误信息了。
内容的提问来源于stack exchange,提问作者Gabriel Rogath
相关产品推荐
相关产品推荐

