Я хочу загрузить фотографии в хранилище Firebase.
В состоянии компонента React у меня есть массив с фотографиями. Фотографии - это файлы, которые пользователь просматривает при вводе файлов. Фотографии имеют свойство .needUpload
до true
, если файл необходимо загрузить в хранилище.
Вот функция загрузки:
uploadPhotos = () => {
let photosToSave = []
if (this.state.photos.length) {
photosToSave = this.state.photos
.filter(photo => photo.needUpload && true)
.map(photo => {
const extensionPattern = /(?:\.([^.]+))?$/
const fileName = photo.value.name
const fileExtension = extensionPattern.exec(fileName)[1]
const newFileName = new Date().getTime()
const fileLocation = storageRef.child('estateObjects/' + newFileName + '.' + fileExtension)
return new Promise(resolve => {
fileLocation.put(photo.value).on(
firebase.storage.TaskEvent.STATE_CHANGED,
snapshot => {
//let progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100
},
null,
() => {
fileLocation.getDownloadURL().then(url => {
resolve({ url: url, file: newFileName + '.' + fileExtension })
})
}
)
})
})
return Promise.all(photosToSave).then(response => {
return response
})
} else return Promise.all(photosToSave).then(response => [])
}
Основная проблема заключается в том, что когда начинается загрузка, она (терпеливо) жду, я думаю для загрузки сначала 2-3 файла, затем в массиве 'resolve' я получаю дублированные элементы массива. Так что-то работает не так, но я не могу понять, что ...
может быть, проблема с новым именем файла ?? Когда файл переименовывает новый Date.getTime () возвращает одно и то же время для нескольких файлов, потому что они были загружены одновременно?