Хранилище Flutter Firestore для загрузки

# #firebase #flutter #google-cloud-firestore #firebase-storage

Вопрос:

Мне нужно загрузить файл загрузки из upla, отправив фотографию в хранилище Firebase, чтобы я мог хранить ее внутри документа Firestore. Проблема с моим кодом заключается в том, что сохраненный URL-адрес не является https//: поэтому мне нужно получить файл загрузки. Мне было интересно, куда мне нужно позвонить, чтобы получить файл загрузки и сохранить его в своей базе данных Firestore.

Вот мой код:

 Futurelt;voidgt; _uploadProfilePhoto(String inputSource) async {  final picker = ImagePicker();  PickedFile? pickedImage;  try {  pickedImage = await picker.getImage(  source: inputSource == 'camera'  ? ImageSource.camera  : ImageSource.gallery,  maxWidth: 1920);   final String fileName = path.basename(pickedImage!.path);  File imageFile = File(pickedImage.path);   try {  await storage.ref("avatars/$fileName").putFile(  imageFile,  SettableMetadata(customMetadata: {  'uploaded_by': '$uid',  }));    // Create/Update firesotre document  users.doc(uid).update({  "profilePhoto": fileName,  });   setState(() {});  } on FirebaseException catch (error) {  print(error);  }  } catch (err) {  print(err);  }  }  

Ответ №1:

Вы можете позвонить getDownloadURL() по ссылке в любое время после завершения загрузки файла. Так что это было бы хорошее место:

 await storage.ref("avatars/$fileName").putFile(  imageFile,  SettableMetadata(customMetadata: {  'uploaded_by': '$uid',  })); var downloadURL = await storage.ref("avatars/$fileName").getDownloadURL();  // Create/Update firesotre document users.doc(uid).update({  "profilePhoto": downloadURL, });  

Комментарии:

1. изображение загружается нормально, но ссылка не обновляется

2. У меня там была крошечная опечатка (две .. случайно). Если бы это не было причиной, не могли бы вы немного более четко рассказать о том, где все идет не так. Например: просмотрите код в отладчике и посмотрите, какое значение downloadURL имеет сразу после вызова getDownloadURL() . Вам это кажется правильным?