Как создать уникальный идентификатор изображения при каждом нажатии кнопки загрузки с помощью Flutter / Firebase? - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь создать кнопку загрузки изображения и связать ее с Firebase таким образом, чтобы при каждом нажатии кнопки изображение отправлялось в Firebase Storage. Вот соответствующие фрагменты моего кода:

  // Files, and references
  File _imageFile;
  StorageReference _reference =
      FirebaseStorage.instance.ref().child('myimage.jpg');

  Future uploadImage() async {
    // upload the image to firebase storage
    StorageUploadTask uploadTask = _reference.putFile(_imageFile);
    StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;

    // update the uploaded state to true after uploading the image to firebase
    setState(() {
      _uploaded = true;
    });
  }
  // if no image file exists, then a blank container shows - else, it will upload 
  //the image upon press
  _imageFile == null
                ? Container()
                : RaisedButton(
                    color: Colors.orange[800],
                    child: Text("Upload to Firebase Storage"),
                    onPressed: () {uploadImage();}),

Однако, каждый раз, когда я нажимаю эту кнопку, изображение перезаписывает уже существующее изображение с тем же именем, и мне было интересно, есть ли способ сделать чтобы при каждом нажатии кнопки имя изображения менялось, и в результате исходное изображение не переопределялось. Я был бы очень признателен за любую помощь, которую я мог бы получить, поскольку я очень плохо знаком с Flutter и Firebase.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Я думаю, что вы ищете генератор UUID.

К счастью, есть пакет для этого: uuid

String fileID = Uuid().v4(); // Generate uuid and store it.

Теперь вы можете использовать postID в качестве имени для вашего файла.

ПРИМЕЧАНИЕ Когда вы загружаете свой файл, вы можете захотеть сгенерировать новый uuid, чтобы избежать использования старого:)

Еще одна вещь: ПОЖАЛУЙСТА, не используйте DateTime.now () подумайте о , если два пользователя загрузили изображение одновременно !!

0 голосов
/ 06 апреля 2020

Обычно, когда вы звоните:

FirebaseStorage.instance.ref().child('myimage.jpg');

Вы загружаете файл с тем же именем каждый раз:

myimage.jpg

Чтобы решить вашу проблему, вам просто нужно сгенерировать случайный ключ для изображения. Есть несколько способов сделать это:

Если вы настроили Firestore (базу данных, которую предлагает Firebase), тогда вы можете * * * * * * скопировать имя изображения в базу данных и вернуть его. DocumentID , который Firestore создаст для вас случайный идентификатор, который не используется.

Вы также можете использовать текущую дату / время:

DateTime.now().toString()

или

DateTime.now().toIso8601String();

Или, конечно, вы всегда можете написать свою собственную функцию хеширования, основанную на имя файла, который вы загружаете, который вы получите, выполнив:

_imageFile.toString();

Затем, как только вы получите случайное имя файла, вы должны загрузить его следующим образом:

FirebaseStorage.instance.ref().child(myImageName).putFile(_imageFile);
...