Baseflow / Baseflow/flutter_cache_manager

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

Đang mở
#240 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Dart
Star
809
Fork
510
Merge trung bình
6 phút
Pull request đã merge (30 ngày)
1

Mô tả

## 🐛 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!
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Start in flutter_cache_manager_firebase/src/firebase_http_file_service.dart, especially FirebaseHttpFileService.get, and compare the current getDownloadURL path with the reported getReferenceFromUrl and getData approach. Reproduce the valid gs:// download and verify that the cache manager fetches the file without the PlatformException.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
dart, firebase
Lĩnh vực
cloud, mobile
Loại issue
Lỗi
Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Đặc tả rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.