Я делаю сайт, где пользователи могут создавать новые проекты. Для создания проекта пользователям необходимо заполнить форму со всей информацией о проекте. Внутри этой формы находится поле ввода файла, пользователи могут выбирать изображения и документы с этим. Мой код проходит через все файлы и сохраняет их в хранилище Firebase. Эта часть кода работает отлично, за исключением той части, где я пытаюсь заполнить поля документа этими данными.
Я попробовал это, используя Object.assign()
внутри Firebase .update()
. Всякий раз, когда этот фрагмент кода запускается, он выдает эту ошибку:
Функция DocumentReference.update () вызвана с неверными данными. Неподдерживаемое значение поля: пользовательский объект File (находится в изображении поля)
Я знаю, что проблема Object.assign
здесь, потому что она работает без него. Буду признателен, если кто-нибудь сможет мне помочь с этой проблемой.
Это часть кода, которая выдает ошибку:
firestore.collection('projects').doc(res.id)
.update(Object.assign(this.values, {
createdAt: new Date(),
updatedAt: new Date(),
createdBy: '/users/' + firebaseApp.auth().currentUser.email,
approved: false
}))
.then(res => {
console.log(res)
this.$toast.success('Project changes saved', { icon: 'mdi-check-bold' })
}).catch((err) => {
this.$toast.error(err.message, { icon: 'mdi-alert-circle' })
console.log(err)
})
Это функция, которую я вызываю при отправке:
submit () {
this.overlay = true
firestore.collection('projects').add({})
.then((res) => {
Promise.all(
fileKeys.map((key, index) => {
return new Promise((resolve, reject) => {
if (!this.values[key]) {
resolve(this.values[key])
} else {
if (typeof this.values[key][0] === 'undefined') {
const file = this.values[key]
const ref = storage.ref(`/projects/${res.id}/${file.name}`)
this.uploadHandler(file, ref, index).then((downloadURL) => {
if (downloadURL) {
this.values[key] = {
url: downloadURL,
fullPath: ref.fullPath,
name: file.name || '',
size: file.size || '',
type: file.type || ''
}
resolve(this.values[key])
} else {
reject()
}
})
} else {
const fileCollection = [];
Promise.all(
(this.values[key]).map((file) => {
return new Promise((resolve, reject) => {
const ref = storage.ref(`/projects/${res.id}/${file.name}`)
this.uploadHandler(file, ref, index).then((downloadURL) => {
if (downloadURL) {
fileCollection.push({
url: downloadURL,
fullPath: ref.fullPath,
name: file.name || '',
size: file.size || '',
type: file.type || '',
height: '',
width: ''
})
}
resolve(downloadURL)
}).catch((e) => {
reject(e)
})
})
})
).then(() => {
this.values[key] = fileCollection.length > 0 ? fileCollection : null
resolve(fileCollection)
})
}
}
})
})
)
firestore.collection('projects').doc(res.id).update(Object.assign(this.values, { createdAt: new Date(), updatedAt: new Date(), createdBy: '/users/' + firebaseApp.auth().currentUser.email, approved: false }))
.then(res => {
console.log(res)
this.$toast.success('Project changes saved', { icon: 'mdi-check-bold' })
}).catch((err) => {
this.$toast.error(err.message, { icon: 'mdi-alert-circle' })
console.log(err)
})
}).catch((err) => {
console.log(err)
console.log('error')
})
},