保存对象时如何将对象的属性转换为base64

问题描述

我有一个表单来保存一本书(书名,作者,图像等)和带有nodejs的后端,但是我不知道如何将图像名称转换为base64,这种形式是被动的,我得到了每个与财产 formControlName =“”。如何在base64中转换book.image。我可以在mongodb中保存一个对象,但是图像名称不在base64中。

    <div class="form-group row">
      <label class="col-2 col-form-label"
      >Imagen</label>
      <input
      style="display: none"

      formControlName="image"
      type="file" (change)="onFileChanged($event)"
      #fileInput>
    <button (click)="fileInput.click()">Select File</button>
    </div>

  </div>




  <div class="form-group row">
    <label class="col-2 col-form-label">&nbsp;</label>
    <div class="input-group col">
      <button type="submit" class="btn btn-outline-primary btn-block"
      >
        Send
      </button>
    </div>
  </div>

</form>



  onFileChanged(event)
  {

    this.selectedFile = event.target.files[0];
    console.log(this.selectedFile);
  }



this.book = this.forma.value;
      const uploadData = new FormData();


      uploadData.append('myFile',this.selectedFile,this.selectedFile.name);

      this.http.post('http://localhost:3999/admin/save',uploadData) // this resquest upload the image
        .subscribe(
          response =>
          {
            
            
            this.userservice.create(this.book).subscribe( // this request save the object
              response =>
              {
                console.log(this.book);
                this.forma.reset();
                this.snackBar.open('book created','Close',{duration:3000});
             },error =>
            {
            console.log(error);
            }
            );
          }
        );
    }

nodejs的后端

save: function(req,res) {
        // Recoger los parametros de la petición

        var params = req.body;

        // Validar los datos
        try {
            var validate_title = !validator.isEmpty(params.title);
            var validate_description = !validator.isEmpty(params.description);
            var validate_author = !validator.isEmpty(params.author);
            var validate_price = !validator.isEmpty(params.price);
            var validate_stock = !validator.isEmpty(params.stock);
            //console.log(validate_name,validate_surname,validate_email,validate_password);
        } catch (err) {
            return res.status(200).send({
                message: "Faltan datos por enviar del libro"
            });
        }

        if (validate_title && validate_description && validate_author && validate_price && validate_stock) {
            // Crear objeto de usuario
            var book = new Book();


            // Conseguir el nombre y la extension del archivo
            var file_path = params.image;
            //  var file_path = req.;
            var file_split = file_path.split('\\');

            // ** Adventencia ** En linux o mac
            //  var file_split = file_path.split('/');

            // Nombre del archivo
            var file_name = file_split[2].toString('base64');

            // Extensión del archivo
            var ext_split = file_name.split('\.');
            var file_ext = ext_split[1];

            // Comprobar extension (solo imagenes),si no es valida borrar fichero subido
            if (file_ext != 'png' && file_ext != 'jpg' && file_ext != 'jpeg' && file_ext != 'gif') {
                fs.unlink(file_path,(err) => {

                    return res.status(200).send({
                        status: 'error',message: 'La extensión del archivo no es valida.'
                    });

                });

            }

            // Asignar valores al objeto
            book.title = params.title;
            book.description = params.description;
            book.author = params.author;
            book.price = params.price;
            book.image = file_name.toString('base64');
            //  book.image = file_name;
            book.stock = params.stock;


            // Comprobar si el usuario existe
            Book.findOne({ title: book.title },(err,issetBook) => {
                if (err) {
                    return res.status(500).send({
                        message: "Error al comprobar duplicidad del libro"
                    });
                }

                if (!issetBook) {


                    //y guardar libro
                    book.save((err,bookStored) => {
                        if (err) {
                            return res.status(500).send({
                                message: "Error al guardar el libro"
                            });
                        }

                        if (!bookStored) {
                            return res.status(400).send({
                                message: "El libro no se ha guardado"
                            });
                        }

                        // Devolver respuesta
                        return res.status(200).send({
                            status: 'success',book: bookStored
                        });

                    }); // close save


                } else {
                    return res.status(200).send({
                        message: "El libro ya está regisTrado"
                    });
                }

            });


        } else {
            return res.status(200).send({
                message: "Validación de los datos del libro incorrecta,intentalo de nuevo"
            });
        }

    },

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)