当前位置:  开发笔记 > 编程语言 > 正文

使用Mongoose中的Multer将文件存储到MongoDB中

如何解决《使用Mongoose中的Multer将文件存储到MongoDB中》经验,为你挑选了1个好方法。

我已经到目前为止接受了我的HTML表单中的文件,并通过$http.post使用ng-file-upload模块以角度发布.现在我想在Mongoose中接受这个文件并将其存储到我在MongoLab上托管的NoSQL MongoDB中.我已经阅读了关于这个模块的信息Multer并且遵循了基本的文档,但它只是我到目前为止.在我解释问题的开始之前,让我发布我的代码:


我的HTML表单:

Upload files here *required
file type is not accepted

Upload Successful

我的角色代码:

 $scope.uploadExercise = function (file) {

    console.log(file);
    var fd = new FormData();
    fd.append('file', file);
    $http.post(url+"/Upload", fd,{
        transformRequest: angular.identity,
        header:{'Content-Type': undefined},
        enctype:'multipart/form-data'
    }).success(function () { }).error(function () { });
    console.log(fd);
};

控制台日志返回正确的文件对象.


到目前为止猫鼬:

var mongoose = require("mongoose");
var express = require("express");
var multer = require('multer');
var upload = multer({ dest: 'Uploads/' });
var bodyparser = require("body-parser");
var app = express();


mongoose.connect("connection-string");
app.use(bodyparser.json());

app.post('/Upload', upload.single('solution') ,function (req, res, next) {
    console.log(req.file);
});

console.log使得返回undefined.所以,某个地方出现了严重错误.请帮帮我!我希望在我的Mongoose中接收这个文件并将其存储到MongoDB中,我以前从未这样做过,似乎找不到任何适合Multer的文档或任何适当的解释来存储与我的案例相关的文件.我究竟做错了什么?我应该做什么呢?



1> Gandalf the ..:

男人你在错误的道路上奔跑.我已在前一个问题请求中解释过Multer用于将文件保存在文件磁盘系统中而不是直接保存到数据库中.为此,您必须使用GRIDFS.

来到你当前的问题.

app.post('/Upload', upload.single('solution') ,function (req, res, next) {
    console.log(req.file);
});

这里upload.single('solution')- 调用一个函数上传和传递的文件名是解决方案,但很明显它在这里不可用.

使用这种格式--Multer的文档

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage })

存储部件用于提供必须保存文件的路径,文件名部分用于更改您希望拥有的文件名.

请阅读文档,因为这会有所帮助.当我们使用第三方模块时,我们必须承认他们已经提供的信息,以便我们可以轻松地使用他们的工作.

让我让你更轻松.这是现成的代码,可以工作.

通过ng-file upload上传文件时,Multer抛出了奇怪的错误

去检查那个线程.我提出了这个问题 - 问题在于我是以数组格式发送文件,就像在多个文件中一样.如果您不这样做,只需更改ng-file-upload段以使用单个上载演示示例,并在服务器端nodejs代码替换为.array,.single并且事情将以您希望它们工作的方式工作 - 假设您要使用文件磁盘系统存储文件.

我再说一遍,这个方法不会帮助你直接在mongodb中保存文件.

如果您需要进一步澄清,请与我们联系.


如果您使用GRID FS保存文件,为什么要将其保存在其他任何地方.说实话,我没有使用文件系统中的节点js自动删除部分.但我可以提出一个替代方案.您可以创建一个每天运行的cron作业,并在服务器上使用linux命令清除特定部分.我正在对您之前的查询进行一些研究,如果我找到了什么,我会告诉您.
推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有