Baseflow / Baseflow/flutter_cache_manager

[flutter_cache_manager_firebase] PlatformException(download_error, Object does not exist at location., null, null)

未关闭
#240 2 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Dart
星标
809
派生
510
平均合并
6 分钟
30 天内合并 PR
1

描述

## 🐛 Bug Report

I'm trying to get an audio file using a valid `gs://` path and it's throwing a platform exception:

```
E/flutter ( 8213): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(download_error, Object does not exist at location., null, null)
E/flutter ( 8213): #0 StandardMethodCodec.decodeEnvelope
package:flutter/…/services/message_codecs.dart:582
E/flutter ( 8213): #1 MethodChannel._invokeMethod
package:flutter/…/services/platform_channel.dart:159
E/flutter ( 8213):
E/flutter ( 8213): #2 MethodChannel.invokeMethod
package:flutter/…/services/platform_channel.dart:332
E/flutter ( 8213): #3 StorageReference.getDownloadURL
package:firebase_storage/src/storage_reference.dart:142
E/flutter ( 8213): #4 FirebaseHttpFileService.get
package:flutter_cache_manager_firebase/src/firebase_http_file_service.dart:12
E/flutter ( 8213): #5 WebHelper._download
package:flutter_cache_manager/…/web/web_helper.dart:76
E/flutter ( 8213): #6 WebHelper._updateFile
package:flutter_cache_manager/…/web/web_helper.dart:58
E/flutter ( 8213): #7 _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 8213): #8 _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 8213): #9 _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
```

I know it's a valid location too as replacing

```dart
final file = await FirebaseCacheManager().getSingleFile(audioURL);
```

with

```dart
final dir = (await getApplicationDocumentsDirectory()).path;
final filePath = path.join(dir, path.basename(audioURL));
final file = File(filePath);
final ref = await firebaseStorage.getReferenceFromUrl(audioURL);
await ref.writeToFile(file);
```

correctly fetches the file.

This library's current implementation calls `getDownloadURL()` but that creates a revokable token as a side effect and even has a potential rate cost (I read this in a SO post but can't find it). As a workaround, maybe could we replace this:

```dart
class FirebaseHttpFileService extends HttpFileService {
@override
Future get(String url,
{Map headers = const {}}) async {
var ref = FirebaseStorage.instance.ref().child(url);
var _url = await ref.getDownloadURL() as String;

return super.get(_url);
}
}
```

with

```dart
class FirebaseHttpFileService extends HttpFileService {
@override
Future get(String url,
{Map headers = const {}}) async {
var ref = await FirebaseStorage.instance.getReferenceFromUrl(url);

final streamedResponse =
StreamedResponse(ref.getData(32000).asStream(), 200);

return HttpGetResponse(streamedResponse);
}
}
```

**Version:** 1.x
flutter_cache_manager_firebase: 1.0.1

```
[✓] Flutter (Channel dev, 1.23.0-18.0.pre, on Mac OS X 10.15.6 19G2021 x86_64, locale en-US)

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
[✓] Xcode - develop for iOS and macOS (Xcode 11.7)
[✓] Chrome - develop for the web
[✓] Android Studio (version 4.0)
[✓] Connected device (3 available)

• No issues found!
```

贡献指南

打开贡献指南

调研方向

从 flutter_cache_manager_firebase/src/firebase_http_file_service.dart 开始,尤其检查 FirebaseHttpFileService.get,并将当前的 getDownloadURL 路径与报告中的 getReferenceFromUrl 和 getData 方法进行比较。复现有效的 gs:// 下载,并验证缓存管理器可以在没有 PlatformException 的情况下获取文件。

由索引模型根据 Issue 内容生成。

评估

技术栈
dart, firebase
领域
cloud, mobile
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
描述清楚
新手友好度
35/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。