firebase / flutterfire

🔥 A collection of Firebase plugins for Flutter apps.
https://firebase.google.com/docs/flutter/setup
BSD 3-Clause "New" or "Revised" License
8.63k stars 3.95k forks source link

🐛 [firebase_storage] throws "no object found" error #6258

Closed xavierpjb closed 3 years ago

xavierpjb commented 3 years ago

Bug report

Describe the bug firebaseStorage.refFromUrl incorrectly processing url string, leading to inability to properly reference storage object. Seems to be an issue with processing ':' (colon) character in url

Steps to reproduce

Steps to reproduce the behavior:

final FirebaseStorage storage = FirebaseStorage.instance;
final url = 'https://firebasestorage.googleapis.com/v0/b/mvral-fire.appspot.com/o/7dKYivUKYH3yravgRalA%2Fimage%2F2021-04-22%2011:07:00.308641_13xAe5Sf3Za84rkDQuRWhrHIXJ13_waduphaitian?alt=media&token=ed6168d1-a5b3-4822-ba65-7d3b8442e8be';
final ref = storage.refFromUrl(url);
print(ref.fullPath); // Prints "7dKYivUKYH3yravgRalA/image/2021-04-22 11" which is missing every thing after ':'
await ref.delete() // throws "no object found"

Expected behavior

storage.refFromUrl(url) should return "7dKYivUKYH3yravgRalA/image/2021-04-22 11:07:00.308641_13xAe5Sf3Za84rkDQuRWhrHIXJ13_waduphaitian"

Sample project

See steps to reproduce


Flutter doctor

Run flutter doctor and paste the output below:

Click To Expand ``` [✓] Flutter (Channel stable, 2.0.4, on macOS 11.2.3 20D91 darwin-x64, locale en-US) [✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2) [✓] Xcode - develop for iOS and macOS [✓] Chrome - develop for the web [✓] Android Studio (version 4.1) [✓] VS Code (version 1.56.2) [✓] Connected device (2 available) ```
darshankawar commented 3 years ago

@xapatjb4 What version of the plugin are you using ? Can you provide flutter pub deps -- --style=compact ?

xavierpjb commented 3 years ago

flutter pub deps -- --style=compact output

Dart SDK 2.12.2
Flutter SDK 2.0.4
mvral 1.1.0+7

dependencies:
- animations 2.0.0 [flutter]
- cached_network_image 3.0.0 [flutter flutter_cache_manager octo_image]
- camera 0.8.1 [flutter camera_platform_interface pedantic quiver]
- cloud_firestore 1.0.6 [cloud_firestore_platform_interface cloud_firestore_web firebase_core firebase_core_platform_interface flutter meta]
- cupertino_icons 1.0.2
- custom_info_window 1.0.1 [flutter google_maps_flutter]
- file 6.1.1 [meta path]
- firebase_analytics 8.0.2 [firebase_analytics_platform_interface firebase_analytics_web firebase_core flutter meta]
- firebase_auth 1.1.1 [firebase_auth_platform_interface firebase_auth_web firebase_core firebase_core_platform_interface flutter meta]
- firebase_core 1.1.0 [firebase_core_platform_interface firebase_core_web flutter meta]
- firebase_storage 8.0.4 [firebase_core firebase_core_platform_interface firebase_storage_platform_interface firebase_storage_web flutter]
- flutter 0.0.0 [characters collection meta typed_data vector_math sky_engine]
- flutter_login 2.0.0-nullsafety.0 [flutter font_awesome_flutter provider another_transformer_page_view another_flushbar quiver pedantic url_launcher]
- geoflutterfire 3.0.0-nullsafety.2 [flutter cloud_firestore rxdart]
- get_it 6.1.1 [async collection]
- google_fonts 2.0.0 [flutter http path_provider crypto]
- google_maps_flutter 2.0.3 [flutter flutter_plugin_android_lifecycle google_maps_flutter_platform_interface]
- google_mobile_ads 0.12.1+1 [meta flutter]
- googleapis 2.0.0 [_discoveryapis_commons http]
- googleapis_auth 1.1.0 [crypto http]
- image 3.0.2 [archive meta xml]
- image_cropper 1.4.0 [flutter]
- image_picker 0.7.4 [flutter flutter_plugin_android_lifecycle image_picker_platform_interface image_picker_for_web]
- infinite_scroll_pagination 3.0.1 [flutter sliver_tools]
- intl 0.17.0 [clock path]
- location 4.1.1 [flutter location_platform_interface location_web meta]
- logger 1.0.0
- permission_handler 8.0.0+2 [flutter meta permission_handler_platform_interface]
- provider 5.0.0 [collection flutter nested]
- rxdart 0.26.0
- url_launcher 6.0.4 [flutter url_launcher_platform_interface url_launcher_linux url_launcher_macos url_launcher_windows url_launcher_web]

dev dependencies:
- build_runner 1.12.2 [args async build build_config build_daemon build_resolvers build_runner_core code_builder collection crypto dart_style glob graphs http_multi_server io js logging meta mime path pedantic pool pub_semver pubspec_parse shelf shelf_web_socket stack_trace stream_transform timing watcher web_socket_channel yaml]
- flutter_launcher_icons 0.9.0 [args image path yaml]
- flutter_native_splash 1.1.8+4 [image meta path xml yaml universal_io]
- flutter_test 0.0.0 [flutter test_api path fake_async clock stack_trace vector_math async boolean_selector characters charcode collection matcher meta source_span stream_channel string_scanner term_glyph typed_data]
- mockito 5.0.5 [analyzer build code_builder collection dart_style matcher meta path source_gen test_api]

transitive dependencies:
- _discoveryapis_commons 1.0.0 [http http_parser meta]
- _fe_analyzer_shared 20.0.0 [meta]
- analyzer 1.4.0 [_fe_analyzer_shared cli_util collection convert crypto glob meta package_config path pub_semver source_span watcher yaml pedantic]
- another_flushbar 1.10.22 [pedantic flutter]
- another_transformer_page_view 1.0.0 [pedantic flutter]
- archive 3.1.2 [crypto path]
- args 2.0.0
- async 2.5.0 [collection]
- boolean_selector 2.1.0 [source_span string_scanner]
- build 2.0.0 [analyzer async convert crypto glob logging meta path]
- build_config 0.4.7 [checked_yaml json_annotation meta path pubspec_parse yaml]
- build_daemon 2.1.10 [built_collection built_value http_multi_server logging pedantic path pool shelf shelf_web_socket stream_transform watcher web_socket_channel]
- build_resolvers 2.0.0 [analyzer build crypto graphs logging path package_config pool pub_semver stream_transform]
- build_runner_core 6.1.12 [async build build_config build_resolvers collection convert crypto glob graphs logging meta path package_config pedantic pool timing watcher yaml]
- built_collection 5.0.0
- built_value 8.0.4 [built_collection collection fixnum]
- camera_platform_interface 2.0.1 [flutter meta plugin_platform_interface cross_file stream_transform]
- characters 1.1.0
- charcode 1.2.0
- checked_yaml 2.0.1 [json_annotation source_span yaml]
- cli_util 0.3.0 [meta path]
- clock 1.1.0
- cloud_firestore_platform_interface 4.0.2 [collection firebase_core flutter meta plugin_platform_interface]
- cloud_firestore_web 1.0.6 [cloud_firestore_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins js]
- code_builder 3.7.0 [built_collection built_value collection matcher meta]
- collection 1.15.0
- convert 3.0.0 [typed_data]
- cross_file 0.3.1+1 [flutter meta]
- crypto 3.0.1 [collection typed_data]
- dart_style 2.0.0 [analyzer args path pub_semver source_span]
- fake_async 1.2.0 [clock collection]
- ffi 1.0.0
- firebase 9.0.1 [http http_parser js]
- firebase_analytics_platform_interface 2.0.0 [flutter meta]
- firebase_analytics_web 0.3.0 [firebase firebase_analytics_platform_interface flutter flutter_web_plugins meta]
- firebase_auth_platform_interface 4.1.1 [firebase_core flutter meta plugin_platform_interface]
- firebase_auth_web 1.0.7 [firebase_auth_platform_interface firebase_core firebase_core_web flutter flutter_web_plugins http_parser intl js meta]
- firebase_core_platform_interface 4.0.0 [flutter meta plugin_platform_interface]
- firebase_core_web 1.0.2 [firebase_core_platform_interface flutter flutter_web_plugins js meta]
- firebase_storage_platform_interface 2.0.2 [collection firebase_core flutter meta plugin_platform_interface]
- firebase_storage_web 1.0.4 [async firebase_core firebase_core_web firebase_storage_platform_interface flutter flutter_web_plugins http js meta]
- fixnum 1.0.0
- flutter_blurhash 0.6.0 [flutter meta pedantic]
- flutter_cache_manager 3.0.1 [clock collection file flutter http image path path_provider pedantic rxdart sqflite uuid]
- flutter_plugin_android_lifecycle 2.0.1 [flutter]
- flutter_web_plugins 0.0.0 [flutter js characters collection meta typed_data vector_math]
- font_awesome_flutter 9.0.0 [flutter]
- glob 2.0.1 [async collection file path pedantic string_scanner]
- google_maps_flutter_platform_interface 2.0.4 [flutter meta plugin_platform_interface stream_transform collection]
- graphs 1.0.0
- http 0.13.1 [http_parser meta path pedantic]
- http_multi_server 3.0.1 [async]
- http_parser 4.0.0 [charcode collection source_span string_scanner typed_data]
- image_picker_for_web 2.0.0 [image_picker_platform_interface meta flutter flutter_web_plugins]
- image_picker_platform_interface 2.1.0 [flutter meta http plugin_platform_interface]
- io 1.0.0 [meta path string_scanner]
- js 0.6.3
- json_annotation 4.0.1
- location_platform_interface 2.1.0 [flutter meta plugin_platform_interface]
- location_web 3.0.0 [flutter flutter_web_plugins http_parser js location_platform_interface meta]
- logging 1.0.1
- matcher 0.12.10 [stack_trace]
- meta 1.3.0
- mime 1.0.0
- nested 1.0.0 [flutter]
- octo_image 1.0.0+1 [flutter flutter_blurhash]
- package_config 2.0.0 [path]
- path 1.8.0
- path_provider 2.0.1 [flutter path_provider_platform_interface path_provider_macos path_provider_linux path_provider_windows]
- path_provider_linux 2.0.0 [path xdg_directories path_provider_platform_interface flutter]
- path_provider_macos 2.0.0 [flutter]
- path_provider_platform_interface 2.0.1 [flutter meta platform plugin_platform_interface]
- path_provider_windows 2.0.0 [path_provider_platform_interface meta path flutter ffi win32]
- pedantic 1.11.0
- permission_handler_platform_interface 3.5.0 [flutter meta plugin_platform_interface]
- petitparser 4.1.0 [meta]
- platform 3.0.0
- plugin_platform_interface 2.0.0 [meta]
- pool 1.5.0 [async stack_trace]
- process 4.2.1 [file path platform]
- pub_semver 2.0.0 [collection]
- pubspec_parse 1.0.0 [checked_yaml collection json_annotation pub_semver yaml]
- quiver 3.0.1 [matcher]
- shelf 1.1.0 [async collection http_parser path stack_trace stream_channel]
- shelf_web_socket 1.0.1 [shelf stream_channel web_socket_channel]
- sky_engine 0.0.99
- sliver_tools 0.2.2 [flutter]
- source_gen 1.0.0 [analyzer async build dart_style glob meta path pedantic source_span]
- source_span 1.8.0 [charcode collection path term_glyph]
- sqflite 2.0.0+3 [flutter sqflite_common path]
- sqflite_common 2.0.0+2 [synchronized path meta]
- stack_trace 1.10.0 [path]
- stream_channel 2.1.0 [async]
- stream_transform 2.0.0
- string_scanner 1.1.0 [charcode source_span]
- synchronized 3.0.0
- term_glyph 1.2.0
- test_api 0.2.19 [async boolean_selector collection meta path source_span stack_trace stream_channel string_scanner term_glyph matcher]
- timing 1.0.0 [json_annotation]
- typed_data 1.3.0 [collection]
- universal_io 2.0.4 [collection crypto meta typed_data]
- url_launcher_linux 2.0.0 [flutter]
- url_launcher_macos 2.0.0 [flutter]
- url_launcher_platform_interface 2.0.3 [flutter plugin_platform_interface]
- url_launcher_web 2.0.0 [url_launcher_platform_interface meta flutter flutter_web_plugins]
- url_launcher_windows 2.0.0 [flutter]
- uuid 3.0.4 [crypto]
- vector_math 2.1.0
- watcher 1.0.0 [async path pedantic]
- web_socket_channel 2.0.0 [async crypto stream_channel]
- win32 2.0.5 [ffi]
- xdg_directories 0.2.0 [meta path process]
- xml 5.1.0 [collection meta petitparser]
- yaml 3.1.0 [collection source_span string_scanner]
darshankawar commented 3 years ago

Thanks for the details. I am able to replicate the issue using the plugin's example. If we are trying to upload a url that has a timestamp, then trying to call the url using refFromUrl() method, then everything after the : is not returned.

Example url: https://firebasestorage.googleapis.com/v0/b/triage-79c7c.appspot.com/o/playground%2F2021-04-22%2011:07:00.308641some-image.jpg?alt=media&token=ccc30dda-f133-45e2-9f41-7d35a6463d5c';

Running below code:

 final ref = storage.refFromURL(url);
    print(ref.fullPath);
    await ref.delete();

prints flutter: playground/2021-04-22 11 and then throws below exception:

Launching lib/main.dart on iPhone 12 Pro Max in debug mode...
Running Xcode build...
Xcode build done.                                           22.0s
Debug service listening on ws://127.0.0.1:51676/qc4-8vYn0PM=/ws
Syncing files to device iPhone 12 Pro Max...
flutter: playground/2021-04-22 11
[VERBOSE-2:ui_dart_state.cc(199)] Unhandled Exception: [firebase_storage/object-not-found] No object exists at the desired reference.
#0      MethodChannelReference.delete (package:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:35:7)
<asynchronous suspension>
#1      _TaskManager.uploadFile (package:triage/main.dart:86:5)
<asynchronous suspension>
#2      _TaskManager.handleUploadType (package:triage/main.dart:131:44)
<asynchronous suspension>
flutter doctor -v ``` [✓] Flutter (Channel stable, 2.2.1, on Mac OS X 10.15.4 19E2269 darwin-x64, locale en-GB) • Flutter version 2.2.1 at /Users/dhs/documents/fluttersdk/flutter • Framework revision 02c026b03c (4 days ago), 2021-05-27 12:24:44 -0700 • Engine revision 0fdb562ac8 • Dart version 2.13.1 [✓] Xcode - develop for iOS and macOS • Xcode at /Applications/Xcode.app/Contents/Developer • Xcode 12.3, Build version 12C33 • CocoaPods version 1.10.1 [✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome [✓] VS Code (version 1.55.2) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.21.0 [✓] Connected device (4 available) • Darshan's iphone (mobile) • 21150b119064aecc249dfcfe05e259197461ce23 • ios • iOS 14.4.1 • iPhone 12 Pro Max (mobile) • A5473606-0213-4FD8-BA16-553433949729 • ios • com.apple.CoreSimulator.SimRuntime.iOS-14-3 (simulator) • macOS (desktop) • macos • darwin-x64 • Mac OS X 10.15.4 19E2269 darwin-x64 • Chrome (web) • chrome • web-javascript • Google Chrome 91.0.4472.77 • No issues found! ```
markusaksli-nc commented 3 years ago

Closing this as a duplicate of https://github.com/FirebaseExtended/flutterfire/issues/5965