使用Nodejs将包含图像的对象上传到Mongodb?

时间:2019-04-07 10:55:22

标签: node.js angular mongodb express mean-stack

我想使用nodejs将其中包含图像的对象上传到mongodb数据库,但我无法这样做。

角度文件

onSelectedFile(event){
this.edit_image = event.target.files[0];   
}


editProfile(e){ 
const user={
  email:this.edit_email,
  img:this.edit_image,
}
console.log("To Update");
console.log(user);
this._authService.editProfile(user)
      .subscribe(data=>{
        this.dataFromService=data;
        this.user=this.dataFromService.user;
        console.log(data);
      })
}

在服务文件中

editProfile(user){
let headers = new HttpHeaders();

headers=headers.append('content-type','application/json');
console.log("Updating Profile");
console.log(user);
return this.http.post('http://localhost:8080/profile/edit_Profile',user,{headers:headers})
        .pipe(catchError(this.errorHandler))
  }

在Nodejs文件中

router.post('/edit_profile', (req, res) => {
let updateProfile = {
    email: req.body.email,
    img: req.body.img
};

console.log("Profile");
console.log(updateProfile); //to check the data
console.log("Profile");

Profile.updateP(updateProfile, (err, user) => {
    if (err) throw err;
    else {
        console.log("Update User");
        console.log(user);
        res.json({
            user: user
        })
    }
})
})

将数据记录到profileUpdate中时,它正在打印img的空值

用户架构

const profileSchema = schema({
email: {
    type: String,
},
img: { data: Buffer, contentType: String }
});

我想更新现有的配置文件,但是我无法使用multer,甚至无法将图像数据从角度文件传递到nodejs文件

2 个答案:

答案 0 :(得分:0)

与其将图像上传到数据库,不如使用s3之类的东西来存储图像并在mongodb上将链接上传至该图像

答案 1 :(得分:0)

您可以将图像转换为base64格式,这很容易处理并存储在数据库中 将图像转换为base64的功能:-

// Define page variables
var logs = document.getElementById("logs");

// Make global response variable
var response;

// Function for executing GET Requests
function getRequest(adress){

    // Set up new XMLHttpRequest
    var xml = new XMLHttpRequest();
    xml.open("GET", adress, true);

    // Make sure that json is returned
    xml.responseType = "json";

    // Define what happens when a response is received
    xml.onreadystatechange = function(){

        if(this.readyState == 4){

            response = xml.response
            console.log(response) //!OUTPUTS JSON
        };
    };

    // Send the GET Request
    xml.send();
}

//Output all the jobs
getRequest("http://localhost/jobs/getall");
console.log(response); //!OUTPUTS undefined

将base64转换为图像的功能:-

var fs = require('fs');

function base64_encode(){
    var imageAsBase64 = fs.readFileSync('test.png', 'base64');
    // code to store it in the mongodb here
}