Node.js mongodb gridfs编码图片base64
我试图通过gridfs(没有临时文件)读出保存在mongodb中的图像 它应该直接发送到ajax,ajax将其注入html 当我使用实际函数时,会形成一个大位字符串并发送给客户机(保存在ajax响应变量中) 但是当它到达客户机时,位不再正确 因此,我在寻找一种在图片被发送之前对其进行编码的方法(进入base64) (或者还有其他方法吗?) 服务器端-javascript、gridfsNode.js mongodb gridfs编码图片base64,node.js,mongodb,base64,gridfs,Node.js,Mongodb,Base64,Gridfs,我试图通过gridfs(没有临时文件)读出保存在mongodb中的图像 它应该直接发送到ajax,ajax将其注入html 当我使用实际函数时,会形成一个大位字符串并发送给客户机(保存在ajax响应变量中) 但是当它到达客户机时,位不再正确 因此,我在寻找一种在图片被发送之前对其进行编码的方法(进入base64) (或者还有其他方法吗?) 服务器端-javascript、gridfs exports.readFileFromDB = function(req, res, profile, fil
exports.readFileFromDB = function(req, res, profile, filename, callback){
console.log('Find data from Profile ' + JSON.stringify(profile));
var GridReader = new GridStore(db, filename,"r");
GridReader.open(function(err, gs) {
var streamFile = gs.stream(true);
streamFile.on("end", function(){
});
// Pipe out the data
streamFile.pipe(res);
GridReader.close(function(err, result) {
});
客户端-javascript ajax调用:
function imgUpload(){
var thumb = $("#previewPic");
$('#uploadForm').ajaxSubmit({
beforeSend:function(){
//launchpreloader();
},
error: function(xhr) {
//status('Error: ' + xhr.status);
},
success: function(response) {
console.log(response);
var imageData = $.base64Encode(response);
console.log(imageData);
thumb.attr("src","data:image/png;base64"+imageData);
$("#spanFileName").html("File Uploaded")
}
});
}
我正在为当前项目执行类似的操作,但上传完成后,我返回一个JSON对象,其中包含上传图像的URL:
{ success : true, url : '/uploads/GRIDFSID/filename.ext' }
我在Express中有一个路由,它处理/uploads
路由,从GridFS检索文件并将其流回到客户端,因此我可以在IMG SRC中使用上面的URL。这实际上就是DOM中显示的内容:
<img src="/uploads/GRIDFSID/filename.ext">
如果我的解决方案适合您,这显然取决于您的具体设置
app.get(/^\/uploads\/([a-f0-9]+)\/(.*)$/, function(req, res) {
var id = req.params[0];
var filename = req.params[1];
// Set correct content type.
res.set('Content-type', mime.lookup(filename));
// Find GridFS file by id and pipe it to the response stream.
gridfs
.createReadStream({ _id : id })
.on('error', function(err) {
res.send(404); // or 500
})
.pipe(res);
});