Flutter Flatter从Firebase存储中获取文件

Flutter Flatter从Firebase存储中获取文件,flutter,Flutter,我正在开发一个应用程序,用户可以发布他们的照片,我正在使用修改部分。我首先以File类型获取它们的图像,将它们存储在Firebase存储中,获取下载URL并将其存储在Firestore中,然后使用Image.network()显示它们,但在修改页面中,我使用了Imagecropper,它需要图像的路径,因此我必须将其转换为File类型,不是字符串。是否有人知道如何从firebase获取文件,而不是下载URL???使用下载URL下载文件并将其保存在设备上 您可以使用此插件: 如果您不想使用任何插件

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

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

您可以使用此插件:

如果您不想使用任何插件,请查看以下内容:

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

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

下面是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'
  }
}
import'package:path_provider/path_provider.dart';
未来下载文件示例()异步{
目录appDocDir=await getApplicationDocumentsDirectory();
File downloadToFile=File('${appDocDir.path}/download logo.png');
试一试{
等待firebase_storage.FirebaseStorage.instance
.ref('uploads/logo.png')
.writeToFile(下载文件);
}关于firebase_core.FirebaseException捕获(e){
//例如,e.code==‘已取消’
}
}

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

 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)
    });
  }

但我的目的不是将图像下载到设备上,而是将image.network转换为image.file。如果不将图像文件获取/下载到设备上,我认为您将无法对其执行任何类型的操作。您必须加载它,然后执行操作,完成后,从设备中删除该文件。是否可以删除Flatter中的图像?如果知道路径,您可以从目录中删除文件。GetApplicationDocumentDirectory()的角色是什么?它获取一个只有应用程序才能使用的目录,以便您可以在其中存储文件