Dart 未处理的异常:[firebase_storage/unknown] 位置不应该是完整的 URL
Dart Unhandled Exception: [firebase_storage/unknown] location should not be a full URL
我尝试使用插件 https://pub.dev/packages/flutter_cache_manager_firebase 缓存保存在 firebase 存储中的音频 url
当我将 url 传递给方法时
file = await FirebaseCacheManager().getSingleFile(widget.url);
并在控制台中抛出错误
E/flutter (32343): [ERROR:flutter/shell/common/shell.cc(103)] Dart Unhandled Exception: [firebase_storage/unknown] location should not be a full URL., stack trace: #0 MethodChannelReference.getDownloadURL (package:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:59:7)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #1 FirebaseHttpFileService.get (package:flutter_cache_manager_firebase/src/firebase_http_file_service.dart:12:16)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #2 WebHelper._updateFile (package:flutter_cache_manager/src/web/web_helper.dart:99:22)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #3 WebHelper._downloadOrAddToQueue (package:flutter_cache_manager/src/web/web_helper.dart:67:7)
E/flutter (32343): <asynchronous suspension>
请告诉我如何将正确的 url 传递给参数。我目前使用的url是来自
的downloadUrlreturn
Future uploadAudio() async {
final uploadTimestamp = DateTime.now().millisecondsSinceEpoch;
setState(() {
fileName =
getImageFileName(G.loggedInId.toString(), '$uploadTimestamp');
fileName = fileName + '.aac';
});
Reference reference = FirebaseStorage.instance.ref().child(fileName);
TaskSnapshot uploading;
uploading = await reference.putFile(
File(recordingFile), SettableMetadata(contentType: 'audio/aac'));
return uploading.ref.getDownloadURL();
}
您需要从 URL 中删除方案。
你可以这样做:
final String url = widget.url;
final Uri uri = Uri.parse(url);
final urlWithoutScheme = url.replaceFirst('${uri.scheme}://', '');
///Pass it to the getSingleFile method
file = await FirebaseCacheManager().getSingleFile(urlWithoutScheme);
抛出错误的地方
if (lowerCaseLocation.startsWith("gs://")
|| lowerCaseLocation.startsWith("https://")
|| lowerCaseLocation.startsWith("http://")) {
throw new IllegalArgumentException("location should not be a full URL.");
我尝试使用插件 https://pub.dev/packages/flutter_cache_manager_firebase 缓存保存在 firebase 存储中的音频 url
当我将 url 传递给方法时
file = await FirebaseCacheManager().getSingleFile(widget.url);
并在控制台中抛出错误
E/flutter (32343): [ERROR:flutter/shell/common/shell.cc(103)] Dart Unhandled Exception: [firebase_storage/unknown] location should not be a full URL., stack trace: #0 MethodChannelReference.getDownloadURL (package:firebase_storage_platform_interface/src/method_channel/method_channel_reference.dart:59:7)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #1 FirebaseHttpFileService.get (package:flutter_cache_manager_firebase/src/firebase_http_file_service.dart:12:16)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #2 WebHelper._updateFile (package:flutter_cache_manager/src/web/web_helper.dart:99:22)
E/flutter (32343): <asynchronous suspension>
E/flutter (32343): #3 WebHelper._downloadOrAddToQueue (package:flutter_cache_manager/src/web/web_helper.dart:67:7)
E/flutter (32343): <asynchronous suspension>
请告诉我如何将正确的 url 传递给参数。我目前使用的url是来自
的downloadUrlreturnFuture uploadAudio() async {
final uploadTimestamp = DateTime.now().millisecondsSinceEpoch;
setState(() {
fileName =
getImageFileName(G.loggedInId.toString(), '$uploadTimestamp');
fileName = fileName + '.aac';
});
Reference reference = FirebaseStorage.instance.ref().child(fileName);
TaskSnapshot uploading;
uploading = await reference.putFile(
File(recordingFile), SettableMetadata(contentType: 'audio/aac'));
return uploading.ref.getDownloadURL();
}
您需要从 URL 中删除方案。
你可以这样做:
final String url = widget.url;
final Uri uri = Uri.parse(url);
final urlWithoutScheme = url.replaceFirst('${uri.scheme}://', '');
///Pass it to the getSingleFile method
file = await FirebaseCacheManager().getSingleFile(urlWithoutScheme);
抛出错误的地方
if (lowerCaseLocation.startsWith("gs://")
|| lowerCaseLocation.startsWith("https://")
|| lowerCaseLocation.startsWith("http://")) {
throw new IllegalArgumentException("location should not be a full URL.");