Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GridFS通过_id下载文件名查找文件_Javascript_File_Express_Multer_Gridfs Stream - Fatal编程技术网

Javascript GridFS通过_id下载文件名查找文件

Javascript GridFS通过_id下载文件名查找文件,javascript,file,express,multer,gridfs-stream,Javascript,File,Express,Multer,Gridfs Stream,我想用multer和gridfs在express/mongodb中发布一个文件 该文件在前端用一个链接,如果我点击它,我想显示文件的真实名称,例如“example.pdf”,而不是:id.pdf。现在发布工作完全正常,我也可以保存原始文件名,但当点击链接获取文件时,文件名不再是原始文件名。即使我试着在之前设置它 下面是我的get和post的两个例程: var router=require('express')。router(); var mongoose=require('mongoose');

我想用multer和gridfs在express/mongodb中发布一个文件

该文件在前端用一个链接,如果我点击它,我想显示文件的真实名称,例如“example.pdf”,而不是:id.pdf。现在发布工作完全正常,我也可以保存原始文件名,但当点击链接获取文件时,文件名不再是原始文件名。即使我试着在之前设置它

下面是我的get和post的两个例程:
var router=require('express')。router();
var mongoose=require('mongoose');
var conn=猫鼬连接;
var Grid=require('gridfs-stream');
Grid.mongo=mongoose.mongo;
var gfs=电网(连接分贝);
var fs=需要('fs');
router.post('/',函数(req,res){
var dirname=require('path')。dirname(\uuu dirname);
var filename=req.file.filename;
var path=req.file.path;
var type=req.file.mimetype;
var read_stream=fs.createReadStream(dirname+'/'+path);
var writestream=gfs.createWriteStream({
_id:文件名,
“文件名”:req.file.originalname,
模式:“w”,
内容类型:类型
});
读取流管道(写入流);
writestream.on('close',函数(文件){
res.status(200).json({'filename':filename});
});
});
路由器.get('/:id',函数(req,res){
var file_id=req.params.id;
find({u id:file\u id}).toArray(函数(err,files){
如果(错误){
res.json(err);
}
如果(files.length>0){
var mime=文件[0]。contentType;
var filename=文件[0]。文件名;
res.set('Content-Type',mime);
res.set('原始名称',文件名);
var read_stream=gfs.createReadStream({u id:file_id});
读取流管道(res);
}否则{
res.json(“未找到文件”);
}
});
});

module.exports=路由器我设法解决了我的问题,为了得到正确的文件名,我必须在响应中设置一些内容,stackoverflow上的这个问题进一步解释了这一点:

然后我对代码做了一点修改,使其像这样,下面是改进后的代码:

var router=require('express')。router();
var mongoose=require('mongoose');
var conn=猫鼬连接;
var Grid=require('gridfs-stream');
Grid.mongo=mongoose.mongo;
var gfs=电网(连接分贝);
var fs=需要('fs');
router.post('/',函数(req,res){
var dirname=require('path')。dirname(\uuu dirname);
var filename=req.file.filename;
var path=req.file.path;
var type=req.file.mimetype;
var read_stream=fs.createReadStream(dirname+'/'+path);
var writestream=gfs.createWriteStream({
_id:文件名,
“文件名”:req.file.originalname,
模式:“w”,
内容类型:类型
});
读取流管道(写入流);
writestream.on('close',函数(文件){
res.status(200).json({'filename':filename});
});
});
路由器.get('/:id',函数(req,res){
var file_id=req.params.id;
find({u id:file\u id}).toArray(函数(err,files){
如果(错误){
res.json(err);
}
如果(files.length>0){
var mime=文件[0]。contentType;
var filename=文件[0]。文件名;
res.set('Content-Type',mime);
res.set('Content-Disposition',“inline;filename=“+filename”);
var read_stream=gfs.createReadStream({u id:file_id});
读取流管道(res);
}否则{
res.json(“未找到文件”);
}
});
});
module.exports=路由器