PlatformException(firebase_storage,位置不应是完整的 URL。,,null)

Posted

技术标签:

【中文标题】PlatformException(firebase_storage,位置不应是完整的 URL。,,null)【英文标题】:PlatformException(firebase_storage, location should not be a full URL., , null)PlatformException(firebase_storage,位置不应是完整的 URL。,,null) 【发布时间】:2021-09-06 16:29:06 【问题描述】:

当我尝试通过 Firestorage 上传图片时遇到问题。

这个上传功能:




 Future uploadFile() async 
    int i = 1;
    final String fileName = DateTime.now().toString();

    for (var img in _image) 
      setState(() 
        val = i / _image.length;
      );

   
      FirebaseStorage  storage = FirebaseStorage.instance;

      Reference ref = FirebaseStorage.instance.ref('gs://face14-5d6e2.appspsot.com').child(fileName);


      File file = File(img.path);

      try 
        await ref.putFile(file);
       on FirebaseException catch (e) 
        print(e);
      

    
  


/flutter (13708):[firebase_storage/unknown] 位置不应是完整的 URL。 我/颤振(13708):/data/user/0/com.example.face1/cache/image_picker3492941265752856582.jpg E/flutter (13708): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:PlatformException(firebase_storage, location 不应该是完整的 URL., , null) E/flutter (13708): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7) E/flutter (13708): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:158:18) E/颤振(13708): E/颤振(13708): I/flutter (13708):[firebase_storage/unknown] 位置不应是完整的 URL。 我/颤振(13708):/data/user/0/com.example.face1/cache/image_picker1191392770962444186.jpg E/flutter (13708): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:PlatformException(firebase_storage, location 不应该是完整的 URL., , null) E/flutter (13708): #0 StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:597:7) E/flutter (13708): #1 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:158:18) E/颤振(13708): E/颤振(13708): I/flutter (13708):[firebase_storage/unknown] 位置不应是完整的 URL。

【问题讨论】:

【参考方案1】:

查看documentation(如错误所示),您无需在参考中传递gs://domain.tld 部分。

Reference ref = FirebaseStorage.instance.ref('/path/to/filename.txt');

这应该可以正常工作。或者你可以试试这个:

Reference ref = FirebaseStorage.instance.ref()
                    .child('path')
                    .child('to')
                    .child('filename.txt');

【讨论】:

我收到此错误:用户未通过身份验证,请使用 Firebase 身份验证进行身份验证,然后重试。 E/StorageException(13708):代码:-13020 HttpResult:401 E/StorageException(13708):服务器已终止上传会话 E/StorageException(13708):java.io.IOException:服务器已终止上传会话跨度> ava.lang.Thread.run(Thread.java:923) E/StorageException(13708):引起:java.io.IOException:“错误”:“代码”:401, “消息”:“Firebase 应用检查令牌无效。” I/flutter (13708): [firebase_storage/unauthenticated] 用户未经身份验证。验证并重试。 有什么解决办法吗?? @MohamedElsayed 你登录了吗? @MohamedElsayed 这似乎是另一个问题。这里的原始问题似乎已解决。如果它有帮助,您可以通过单击勾号图标接受它,以便其他人知道它已解决。对于新问题,我建议创建一个新问题,或者已经有类似的question【参考方案2】:

我检查了你的代码并通知你没有按照一些说明来实现颤振和火力存储。

请先参考此链接 How to implement cloud storage in flutter

其次,在火存储中上传文件需要很多秒,所以你需要给一些较长的延迟。

我会在 Flutter 中给你我的代码

class ImageUpload extends StatefulWidget 
  @override
  _ImageUploadState createState() => _ImageUploadState();


class _ImageUploadState extends State<ImageUpload> 
  String imageUrl;

  @override
  Widget build(BuildContext context) 
    backgroundColor: Colors.white,
    return Scaffold(  
      appBar: AppBar(
        title: Text('Upload Image', style: TextStyle(color: Colors.black87, fontWeight: FontWeight.bold),),
        centerTitle: true,
        elevation: 0.0,
        backgroundColor: Colors.white,
      ),
      body: Container()
   );
  

将图片上传到 Firebase 存储的功能 在这里,我们将实现一个名为 uploadImage 的函数,该函数将包含从图库中选择图像到将其上传到 Firebase 存储以及在上传后在 Image Placeholder 部分中查看图像的所有配置。

上传代码sn-p:

uploadImage() async 
    final _firebaseStorage = FirebaseStorage.instance;
    final _imagePicker = ImagePicker();
    PickedFile image;
    //Check Permissions
    await Permission.photos.request();

    var permissionStatus = await Permission.photos.status;

    if (permissionStatus.isGranted)
      //Select Image
      image = await _imagePicker.getImage(source: ImageSource.gallery);
      var file = File(image.path);

      if (image != null)
        //Upload to Firebase
        var snapshot = await _firebaseStorage.ref()
        .child('images/imageName')
        .putFile(file).onComplete;
        var downloadUrl = await snapshot.ref.getDownloadURL();
        setState(() 
          imageUrl = downloadUrl;
        );
       else 
        print('No Image Path Received');
      
     else 
      print('Permission not granted. Try Again with permission access');
    
  

直到下一次,伙计们,编码快乐!

【讨论】:

以上是关于PlatformException(firebase_storage,位置不应是完整的 URL。,,null)的主要内容,如果未能解决你的问题,请参考以下文章

PlatformException(firebase_storage,位置不应是完整的 URL。,,null)

如何捕获 Flutter Google 登录 PlatformException?

在颤动的异步函数中捕获 PlatformException

Flutter:FireBase 抛出的 PlatformException 不会被捕获

PlatformException(error, Given String is empty or null, null) 错误颤动

Flutter 在尝试 Firebase 身份验证时无法捕获 PlatformException