У меня проблемы при загрузке изображения на определенный идентификатор в моей БД - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь загрузить изображение определенному пользователю в моей БД, я сделал функцию в бэкэнде и протестировал ее с 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
            });
        }
    },

Я должен загрузить новую коллекцию с выбранным вами идентификатором пользователя, это фотография иописание, но ничего из этого не происходит и загружает только фото.Это не происходит при тестировании на почтальоне и работает правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...