【问题标题】:Flutter getting files from Firebase StorageFlutter 从 Firebase 存储中获取文件
【发布时间】:2023-03-03 03:03:01
【问题描述】:

我正在开发用户可以发布照片的应用程序,并且我正在使用修改部分。我首先将他们的图像作为File 类型获取,将它们存储在Firebase Storage 中并获取下载URL 并将其存储在Firestore 中,然后使用Image.network() 显示它们,但在修改页面中我使用的是Imagecropper,它需要路径图像,所以我必须将其转换为File 类型,而不是String。有谁知道如何从firebase获取文件,而不是downloadURL??

【问题讨论】:

    标签: flutter


    【解决方案1】:

    这就是我能够解决这个问题的方法,

     String userImageUrl = "";
     File _imageFile;
    uploadToStorage() async {
       
        String imageFileName = DateTime.now().millisecondsSinceEpoch.toString();
    
        StorageReference storageReference =
            FirebaseStorage.instance.ref().child(imageFileName);
    
        StorageUploadTask storageUploadTask = storageReference.putFile(_imageFile);
    
        StorageTaskSnapshot taskSnapshot = await storageUploadTask.onComplete;
    
        await taskSnapshot.ref.getDownloadURL().then((urlImage) {
          userImageUrl = urlImage;
    
          print(userImageUrl)
        });
      }
    

    【讨论】:

      【解决方案2】:

      如果您需要下载存储在云存储中的文件,您可以使用 writeToFile 方法

      您可以在任何存储桶引用上调用 writeToFile 方法。文件将下载到的位置由提供的 File 实例的绝对路径决定,

      这是来自 Api 文档的代码

      import 'package:path_provider/path_provider.dart';
      
      Future<void> downloadFileExample() async {
        Directory appDocDir = await getApplicationDocumentsDirectory();
        File downloadToFile = File('${appDocDir.path}/download-logo.png');
      
        try {
          await firebase_storage.FirebaseStorage.instance
              .ref('uploads/logo.png')
              .writeToFile(downloadToFile);
        } on firebase_core.FirebaseException catch (e) {
          // e.g, e.code == 'canceled'
        }
      }
      

      【讨论】:

      • getApplicationDecumnetsDirectory() 的作用是什么?
      • 它得到一个只有你的应用可以使用的目录,这样你就可以在其中存储你的文件
      【解决方案3】:

      使用 downloadURL 下载文件并将其保存在设备上。

      你可以使用这个插件:https://pub.dev/packages/image_downloader

      如果您不想使用任何插件,请查看以下内容: https://stackoverflow.com/a/59356482/11847608

      【讨论】:

      • 但是我的目的不是把图片下载到设备上,而是把Image.network转换成Image.file
      • 如果不将图像文件获取/下载到设备,我认为您将无法对其进行任何操作。您必须加载它,然后执行操作,完成后,从设备中删除文件。
      • flutter里面的图片可以删除吗?
      • 如果您知道路径,您可以从目录中删除文件。 codegrepper.com/code-examples/dart/flutter+delete+file
      猜你喜欢
      • 2020-06-14
      • 2020-04-23
      • 2020-03-26
      • 2020-07-15
      • 2021-10-05
      • 2020-02-12
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多