web-dev-qa-db-fra.com

Flutter Web - Télécharger un fichier image sur Firebase Storage

Sur Flutter Web, je sélectionne un fichier image sur l'ordinateur et j'obtiens un objet Image File. Ensuite, je veux le télécharger sur Firebase Storage. Pour Android et iOS de l'application, j'utilisais une fonction Firebase Cloud et une requête http en plusieurs parties. Cela fonctionnait, mais pas pour la version Web de l'application. Donc,

Comment puis-je télécharger un fichier image html sur Firebase Storage, directement ou via une fonction cloud?

7
JDE10

Voici l'extrait complet qui fonctionne pour moi pour le téléchargement de l'image: html.File Ne fonctionne pas pour moi, le fichier est téléchargé mais vous verrez Error loading preview Dans le stockage Firebase, donc il suffit de passer les octets directement travaille pour moi.

Pour afficher une image, vous pouvez utiliser mediaInfo.bytes Avec un widget qui prend en charge les octets, par exemple FadeInImage vous pouvez utiliser MemoryImage(mediaInfo.bytes) et Image.memory(mediaInfo.bytes)

packages utilisés:

  1. base de fe
  2. image_picker_web
  3. chemin
  4. type_mime
    Future<MediaInfo> imagePicker() async {    
        MediaInfo mediaInfo = await ImagePickerWeb.getImageInfo;
        return mediaInfo;
     }
     
     Future<Uri> uploadFile(
          MediaInfo mediaInfo, String ref, String fileName) async {
        try {
          String mimeType = mime(Path.basename(mediaInfo.fileName));

          // html.File mediaFile =
          //     new html.File(mediaInfo.data, mediaInfo.fileName, {'type': mimeType}); 
          final String extension = extensionFromMime(mimeType);

          var metadata = fb.UploadMetadata(
            contentType: mimeType,
          );

          fb.StorageReference storageReference =
              fb.storage().ref(ref).child(fileName + ".$extension");

          fb.UploadTaskSnapshot uploadTaskSnapshot =
              await storageReference.put(mediaInfo.data, metadata).future;

          Uri imageUri = await uploadTaskSnapshot.ref.getDownloadURL();
          print("download url $imageUri");
          return imageUri;
        } catch (e) {
          print("File Upload Error $e");
          return null;
        }
      }

1
xkxeeshankhan