# #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()
. Вам это кажется правильным?