firebase - 使用 Firebase 存储上传文件失败时捕获错误
问题描述
我正在尝试为用户上传到 Firebase 存储但没有互联网连接时的必然性做准备。目前,如果我使用以下方法并关闭所有互联网连接,它永远不会到达catchError
它只是等待并在连接恢复时打印 dowloadUrl。
FirebaseStorage.instance.setMaxOperationRetryTimeMillis(10);
final StorageReference ref = FirebaseStorage.instance.ref().child("AllUsers").child(uuid).child(fileName);
final StorageUploadTask uploadTask = ref.putFile(image, const StorageMetadata(contentLanguage: "en"));
Uri downloadUrl;
await uploadTask.future.then( (UploadTaskSnapshot snapshot) {
downloadUrl = snapshot.downloadUrl;
print(downloadUrl)
}).catchError((error) {
print(error);
});
这是否意味着我不必担心缓存每个图像以供以后上传并且正在处理?我假设不是,但那会很棒。
更新:
添加这个而不是 then catch:
try {
downloadUrl = (await uploadTask.future).downloadUrl;
print("$downloadUrl");
} catch (error) {
print(error);
}
请求后没有拨打电话。
更新 2:
尝试添加以下内容:
FirebaseStorage.instance.setMaxUploadRetryTimeMillis(10);
FirebaseStorage.instance.setMaxOperationRetryTimeMillis(10);
FirebaseStorage.instance.setMaxDownloadRetryTimeMillis(10);
它返回但通过控制台而不是在我的或块E/StorageException(13068): The operation retry limit has been exceeded.
中被捕获为错误。catchError
try catch
解决方案
(这没有回答确切的问题)
在您的情况下,我会先将文件保存到磁盘,然后在 Firebase 拾取它后将其删除。流量变成
user -> save local -> firebase -> delete local
.
代替
user -> firebase -> (on success) -> done
-> (on failure) -> save local -> firebase
推荐阅读
- c++ - macOS High Sierra 上的 libc++ 损坏
- associations - Sequelize ORM,Hooks 不与关联一起工作
- java - 多平台 OpenCV
- mysql - 为范围内的每个日期选择行
- git - vscode:如何在子文件夹中创建 git repo?
- range - 基于范围的 EGARCH
- mysql - 1351 - 视图的 SELECT 包含变量或参数
- symfony - Symfony 4 simple_form 自定义身份验证器不起作用
- c++ - 使用包含 boost asio 启动应用程序 0xc000007b 时出错
- vue.js - 使用 CDN 的 Vue 和 Vue 路由器