Я пытаюсь загрузить изображение определенному пользователю в моей БД, я сделал функцию в бэкэнде и протестировал ее с PostMan и не доставляет никаких проблем.Но когда я пытаюсь использовать его на своей передней панели, он не работает.
Служба, в которую я загружаю изображение:
makeFileRequest(url: string, params: Array<string>, files: Array<File>, name: string) {
return new Promise(function(resolve, reject) {
const formData: any = new FormData();
const xhr = new XMLHttpRequest();
// tslint:disable-next-line: prefer-for-of
for (let i = 0; i < files.length; i++) {
formData.append(name, files[i], files[i].name);
}
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
resolve(JSON.parse(xhr.response));
}
else {
reject(xhr.response);
}
}
}
xhr.open('POST', url, true);
xhr.send(formData);
});
}
Метод, в котором я загружаю новый документ:
saveFoto(foto: Foto): Observable<any> {
const params = JSON.stringify(foto);
const headers = new HttpHeaders().set('Content-Type', 'application/json');
return this._http.post(this.url + 'saveFoto', params, {headers});
}
TypeScript моего компонента:
onSubmit(form) {
this._pacienteService.saveFoto(this.foto).subscribe(
response => {
this.saveFoto = response.foto;
//Subir Imagen
this._uploadService.makeFileRequest(this.url+"saveFoto", [], this.filesToUpload, 'image').then((result: any) => {
console.log(result);
});
console.log(this.saveFoto);
},
error => {
console.log( error as any);
}
);
}
fileChangeEvent(fileInput: any) {
this.filesToUpload = fileInput.target.files as Array<File>;
}
Метод в бэкэнде:
uploadImage: function(req, res) {
var pacienteId = req.params.id;
var fileName = 'Imagen no subida';
var foto = new Foto();
if (req.files) {
var filePath = req.files.image.path;
var fileSplit = filePath.split('\\');
var fileName = fileSplit[1];
var extSplit = fileName.split('\.');
var fileExt = extSplit[1];
if (fileExt == 'png' || fileExt == 'jpg' || fileExt == 'jpeg') {
var foto = new Foto();
var params = req.body;
foto.paciente = params.paciente;
foto.foto = fileName;
foto.descripcion = params.descripcion;
foto.save((err, fotoStored) => {
if (err) {
res.status(500).send({
message: 'Error al cargar la imagen'
});
}
if (!fotoStored) {
res.status(404).send({
message: 'No existe la imagen a cargar'
});
}
return res.status(200).send({
foto: fotoStored
});
});
} else {
fs.unlink(filePath, (err) => {
return res.status(200).send({
message: 'La extensión no es válida'
});
});
}
} else {
return res.status(200).send({
message: fileName
});
}
},
Я должен загрузить новую коллекцию с выбранным вами идентификатором пользователя, это фотография иописание, но ничего из этого не происходит и загружает только фото.Это не происходит при тестировании на почтальоне и работает правильно.