web-dev-qa-db-fra.com

Flutter - Télécharger une image vers le stockage Firebase

J'obtiens une image de Firebase Storage, prends une photo avec l'appareil photo ou en choisis une dans la bibliothèque. Lorsque l'un d'eux est terminé, j'ai une classe qui stocke un Image afin que je puisse l'utiliser en cas de besoin.

Maintenant, je dois télécharger cette image sur Firebase Storage (modifiée ou nouvelle, peu importe). Firebase me permet d'utiliser l'un des éléments suivants: putData ou putFile, chacun ayant besoin d'un Uint8List ou File respectivement.

Comment puis-je prendre mon Image et obtenir un File ou Uint8List à partir de celui-ci pour le téléchargement?

-

Pour y remédier, comment puis-je obtenir un File de mon image lorsque je la récupère à partir de Firebase Storage?

Dans les deux cas, vous obtenez le type de données correct pour télécharger l'image, que ce soit un File au début ou à la fin.

7
Josh Kahane

Lorsque vous sélectionnez une image avec le sélecteur d'images, il renvoie un fichier, vous pouvez utiliser await pour attendre que l'utilisateur sélectionne un fichier, puis le stocker en tant que fichier. Voici un exemple de code expliquant comment obtenir le fichier à partir du sélecteur d'images et le télécharger sur Firebase.

    FirebaseStorage _storage = FirebaseStorage.instance;

    Future<Uri> uploadPic() async {

    //Get the file from the image picker and store it 
    File image = await ImagePicker.pickImage(source: ImageSource.gallery);  

    //Create a reference to the location you want to upload to in firebase  
    StorageReference reference = _storage.ref().child("images/");

    //Upload the file to firebase 
    StorageUploadTask uploadTask = reference.putFile(file);

    // Waits till the file is uploaded then stores the download url 
    Uri location = (await uploadTask.future).downloadUrl;

    //returns the download url 
    return location;
   }
9
Nash

Lorsque vous choisissez votre image dans une galerie ou un appareil photo

utilisez simplement la fonction mentionnée ci-dessous pour obtenir le nom du fichier avec l'extension

basename(image.path)

puis passez le fichier à Firebase Storage Reference avec le chemin vers lequel vous souhaitez télécharger avec le nom du fichier, vous n'avez pas à penser à l'extension du fichier.

Bibliothèques utilisées

import 'package:image_picker/image_picker.Dart';
import 'package:path/path.Dart';
import 'package:firebase_storage/firebase_storage.Dart';

Code:

upload() async {
   //pick image   use ImageSource.camera for accessing camera. 
   File image = await ImagePicker.pickImage(source: ImageSource.gallery);

   //basename() function will give you the filename
   String fileName = basename(image.path);

   //passing your path with the filename to Firebase Storage Reference
   StorageReference reference =
        FirebaseHelper.firebaseStorage().child("your_path/$fileName");

   //upload the file to Firebase Storage
   StorageUploadTask uploadTask = reference.putFile(image);

   //Snapshot of the uploading task
   StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
}
1
Vicky Salunkhe

firebase_storage: ^ 3.0.6, image_picker: ^ 0.6.1 ces deux bibliothèques vous devez être utilisé

après cela pour obtenir l'image

  Future getImage() async {
    var tempImage = await ImagePicker.pickImage(source: ImageSource.gallery);

    setState(() {
      sampleImage = tempImage;
     });
  }

et maintenant télécharger l'image

Widget enableUpload() {
return Container(
  child: Column(
    children: <Widget>[
      Image.file(sampleImage, height: 300.0, width: 300.0),
      RaisedButton(
        elevation: 7.0,
        child: Text('Upload'),
        textColor: Colors.white,
        color: Colors.blue,
        onPressed: () {
          final StorageReference firebaseStorageRef =
              FirebaseStorage.instance.ref().child('myimage.jpg');
          final StorageUploadTask task =
              firebaseStorageRef.putFile(sampleImage);

        },
      )
    ],
  ),
);
}

vous pouvez utiliser ce widget enableUpload () où vous le souhaitez.

0
The-A-Team

Je ne sais pas quel est votre type Image. Dans le framework Flutter, il y a est une classe Image , qui est un widget et ce n'est pas ce que vous obtenez de la caméra.

Dans Flutter, une image n'est généralement qu'un File, ce qui signifie que putFile devrait fonctionner correctement.

FirebaseStorage.instance.ref().child(path).putFile(image)

Si ce que j'ai publié ne fonctionne pas, veuillez ajouter des informations sur vos types réels.