我已经到目前为止接受了我的HTML表单中的文件,并通过$http.post
使用ng-file-upload
模块以角度发布.现在我想在Mongoose中接受这个文件并将其存储到我在MongoLab上托管的NoSQL MongoDB中.我已经阅读了关于这个模块的信息Multer
并且遵循了基本的文档,但它只是我到目前为止.在我解释问题的开始之前,让我发布我的代码:
我的HTML表单:
我的角色代码:
$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的文档或任何适当的解释来存储与我的案例相关的文件.我究竟做错了什么?我应该做什么呢?
男人你在错误的道路上奔跑.我已在前一个问题请求中解释过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中保存文件.
如果您需要进一步澄清,请与我们联系.