Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Node.js 在上传到multer gridfs存储中的mongodb之前,转换文件类型(例如:csv到json)_Node.js_Mongodb_Mongoose_Multer_Gridfs - Fatal编程技术网

Node.js 在上传到multer gridfs存储中的mongodb之前,转换文件类型(例如:csv到json)

Node.js 在上传到multer gridfs存储中的mongodb之前,转换文件类型(例如:csv到json),node.js,mongodb,mongoose,multer,gridfs,Node.js,Mongodb,Mongoose,Multer,Gridfs,我使用multer的gridfs存储引擎将文件从brower上传到mongodb数据库 我需要允许用户上传csv和json文件类型(其他在未来)。如何检查文件类型是否为csv,并在将其上载到数据库之前将其转换为json 我使用了多个npm包,比如csvtojson、papaparse。使用papaparse,我可以将文件类型转换为json,但似乎无法在存储/上传中访问它 以下是我迄今为止所做的工作 const storage=new GridFsStorage({ url:“”, 文件:(请求

我使用multer的gridfs存储引擎将文件从brower上传到mongodb数据库

我需要允许用户上传csv和json文件类型(其他在未来)。如何检查文件类型是否为csv,并在将其上载到数据库之前将其转换为json

我使用了多个npm包,比如csvtojson、papaparse。使用papaparse,我可以将文件类型转换为json,但似乎无法在存储/上传中访问它

以下是我迄今为止所做的工作

const storage=new GridFsStorage({
url:“”,
文件:(请求,文件)=>{
返回新承诺((解决、拒绝)=>{
常量文件名=`${new Date()
.toJSON()
.切片(0,10)
.拆分(“—”)
.reverse()
.join(“.”)}-${file.originalname}`;
常量文件信息={
文件名,
bucketName:“上传”
};
解决(文件信息);
});
}
});
const upload=multer({
存储
fileFilter:函数(请求、文件、cb){
var filetypes=/json | csv/;
var mimetype=filetypes.test(file.mimetype);
var extname=filetypes.test(path.extname(file.originalname).toLowerCase());
if(mimetype&&extname){
返回cb(null,true);
}
cb({
fileTypeError:“文件上载仅支持以下文件类型-”+文件类型
});
}
});
const fileUpload=upload.single(“文件”);
//创建mongo连接
const conn=mongoose.createConnection(mongoURI);
//初始gfs
让gfs;
conn.once(“打开”()=>{
控制台日志(“连接打开”);
gfs=网格(conn.db,mongoose.mongo);
gfs.收集(“上传”);
});
app.use(bodyParser.json({
限制:“50mb”
}));
应用程序使用(
bodyParser.urlencoded({
是的,
限制:“50mb”,
参数限制:1000000
})
);
//@route POST api/日志/上传
//@desc上传文件
//@access-Public
app.post(“/api/logs/upload)”,(请求、回复)=>{
文件上传(req、res、函数(err){
如果(错误){
返回res.status(501).json(err);
}
//发回文件数据
//req.body在这里也是空的
res.json({
文件:req.file
});
});

});您必须创建自己的存储引擎()

\u handleFile
方法中,您可以访问文件路径,您可以使用该路径转换文件。然后,如果您想使用gridfs,我建议您绕过
gridfs存储引擎
模块(顺便说一句,该模块自2016年以来一直未被触及)。只需查看上的代码,您就可以执行以下操作:

MyCustomStorage.prototype._handleFile = function _handleFile (req, file, cb) {
  this.getDestination(req, file, function (err, path) {
    if (err) return cb(err)
    const writestream = gfs.createWriteStream({
      filename: file.originalname,
      metadata: req.body,
      content_type: file.mimetype
    });

    file.stream.pipe(csv()).pipe(writestream);
    writestream.on('close', function (file) {
      console.log('gridfs-storage-engine: saved', file);
      cb(null, { gridfsEntry: file });
    });
  });
}

嘿,谢谢你。如何将目标设置为mongodb database const storage=new customStorage({destination:function(req,file,cb){cb(null,path.join(uu dirname,“uploads”);},filename:function(req,file,cb){cb(null,Date.now());});如果您以前做过这样的工作,请将示例连接发送给我。此处:模块包含连接过程Hey DB,我从哪里获得对文件内容的访问权限?file.stream.pipe(csv(此处为insert_file_CONTENTS_)).pipe(writestream);如果没有,则使用管道传输到csv的流。我举了一个例子: