Я новичок в загрузке файлов в angular. Я пытаюсь отправить файл, используя объект данных формы. однако я получаю эту странную ошибку «Неожиданный токен - в JSON в позиции 0». Почему я получаю эту ошибку при отправке данных формы? Когда я загружаю данные через форму почтальона, это работает.
1) post component.ts
onFileSelected(ev) {
this.selectedFile = <File>ev.target.files[0]
console.log(this.selectedFile)
}
createTour() {
this.submitting = true
this.toursService.postTour(this.tour, this.selectedFile)
.subscribe(() => {
this.submitting = false
this.notfiy.showSuccess('tour created!')
}, err => {
this.submitting = false
console.log(err)
this.notfiy.showError(err)
} )
}
}
2) post service.ts
postTour(data: Tour, image) {
let fd = new FormData()
for(let key in data) {
fd.append(key, data[key])
}
fd.append('imageCover', image, image.name)
return this.http.post(this.url, fd, this.getOptionsWithToken())
}
3) back end POST-маршрут
.post(
multerConfigs.setMulter,
multerConfigs.uploadSingle,
multerConfigs.uploadMultiple,
tourController.createTour)
4) multerConfigs. js
exports.setMulter = upload.fields([
{
name: 'imageCover', maxCount: 1
},
{
name: 'profilePic', maxCount: 1
},
{
name: 'images', maxCount: 12
}
])
exports.deleteFile = (file, dest) => {
let p = path.join(process.cwd(), `/uploads/${dest}/` + file)
fs.unlink(p, (err, done) => err ? console.log(err) : '')
}
async function resize(file, path, body) {
await sharp(file)
.resize(400, 400)
.toFormat('png')
.png({ quality: 90 })
.toFile(`uploads/${path}/${body}`)
}
exports.uploadSingle = (req, res, next) => {
try {
if(!req.files) return next()
if (req.files.imageCover) {
req.body.imageCover = `${Date.now()}-image.png`
// console.log('filename>>>', req.files.imageCover[0]) => does NOT have filename
resize(req.files.imageCover[0].buffer, 'tours', req.body.imageCover)
}
if (req.files.profilePic) {
req.body.profilePic = `${Date.now()}-user.png`
resize(req.files.profilePic[0].buffer, 'users', req.body.profilePic)
}
next()
} catch (e) { next(e) }
}