Flutter web - Upload Image File to Firebase Storage

前端 未结 4 1301
轮回少年
轮回少年 2020-12-16 19:34

On flutter web, I pick an image file from the computer and get a File image object. Then I want to upload it to Firebase Storage. For Android and iOS versions of the app I w

4条回答
  •  爱一瞬间的悲伤
    2020-12-16 20:18

    Here is the complete snip that work for me for uploading image: html.File doesn't work for me, the file is uploaded but you will see Error loading preview in firebase storage, so just passing the bytes directly work for me.

    To show an image you can use mediaInfo.bytes with widget that support bytes e.g FadeInImage you can use MemoryImage(mediaInfo.bytes) and Image.memory(mediaInfo.bytes)

    packages used:

    1. firebase
    2. image_picker_web
    3. path
    4. mime_type
        Future imagePicker() async {    
            MediaInfo mediaInfo = await ImagePickerWeb.getImageInfo;
            return mediaInfo;
         }
         
         Future 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;
            }
          }
    
    

提交回复
热议问题