有一点问题,甚至不确定从哪里开始。 我正在使用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图像。
有关我所缺少的内容的任何建议,或者至少我到底做错了什么。
答案 0 :(得分:0)
想出来,不要试图告诉fs.read将文件读作' base64'
更改此行:
fs.readFile(file.path, 'base64', function(err,data){
到
fs.readFile(file.path, function(err,data){
然后将图像设置为 image.data = data //来自文件的原始数据,似乎不需要将其编码为base64。