以mongoose存储图像会吞噬数据

时间:2016-03-22 13:21:13

标签: node.js mongoose

有一点问题,甚至不确定从哪里开始。 我正在使用ng-file-upload来上传文件。文件出现在服务器上,暂时存储在文件中。检查它我可以打开它,它仍然是一个jpg文件(如果那是文件)。

非常确定这是导致问题的数据库本身的保存。 简而言之,我使用base64编码读取文件,然后将其存储到模式中:

router.post('/rest/imgupload', multipartyMiddleware, function(req, res, next){
    var file = req.files.file;
    console.log(file.name);
    console.log(file.type);
    file.owner = req.user.id;
    for( var i in file){
        console.log("ID " + i + " DATA: " +file[i]);
    }

    fs.readFile(file.path, 'base64', function(err,data){
        if(err){
            log.error("File read error: "+err)
            res.status(500).send("Internal server error!")
        } else {
            //file.data=Buffer(data).toString('base64');
            //console.log("This is what comes out" + data);
            var Image = new mgImage(file);
            Image.save(function(err,doc){
                if(err){
                    log.error("Database write error: " + err);
                    res.status(500).send("Internal server error!")
                } else {
                    log.info("Deleting file: " + file.path)
                    //fs.unlink(file.path, function(err){
                    //    if(err){
                    //        log.error("Failed to delete file: " + file.path)
                    //        res.status(500).send("Internal server error!")
                    //    } else{
                    res.status(201).send({ imageId: doc._id })
                    //    }
                    //})
                }
            })
        }
    })


});

要存储数据本身,我使用缓冲区,如下所示:

var sketchSchema = mongoose.Schema({
    name: String,
    size: String,
    type: String,
    data: {
        type: Buffer,
        required: true
    },
    owner: {type: ObjectId, ref: 'User'},
});

但是,如果我尝试将其用作使用base64编码的图片  它失败。似乎存储在数据中的数据不是jpeg图像。

有关我所缺少的内容的任何建议,或者至少我到底做错了什么。

1 个答案:

答案 0 :(得分:0)

想出来,不要试图告诉fs.read将文件读作' base64'

更改此行:

fs.readFile(file.path, 'base64', function(err,data){

fs.readFile(file.path, function(err,data){

然后将图像设置为 image.data = data //来自文件的原始数据,似乎不需要将其编码为base64。