问题描述
我有一个表单来保存一本书(书名,作者,图像等)和带有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"> </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 (将#修改为@)