我想从html页面上传文件并使用node.js将其存储在mongodb数据库中,并使用multer
npm包作为客户端和服务器之间的中间件
以下是我的app.js文件:
var express = require('express')
, multer = require('multer');
var app = express();
var multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads');
},
filename: function (req, file, callback) {
callback(null, file.fieldname + '-' + Date.now());
}
});
var upload = multer({ storage : storage}).single('userPhoto');
app.post('/api/photo',function(req,res){
upload(req,res,function(err) {
if(err) {
return res.end("Error uploading file.");
}
res.end("File is uploaded");
});
});
HTML表单是:
<form id="uploadForm" enctype="multipart/form-data" action="/api/photo" method="post">
<div class="azureD" style="display:none;">
<div class="pull-left">
<label class="labelTemp">Subscription ID</label>
<div class="clickRole addStoTabWid">
<input type="text" id="" placeholder="" style="border:none;width:100%;">
</div>
</div>
<div class="pull-left">
<label class="labelTemp">Upload .pem file</label>
<div class="clickRole addStoTabWid">
<input type="file" name="userPhoto" id="" placeholder="" style="border:none;width:100%;">
</div>
</div>
<div class="modal-footer">
</br><!--<a class="cancelPoup">Cancel</a>
<button class="redButton">Create</button>-->
<input type="submit" value="Upload Image" name="submit">
</div>
</form>
我想将用户选择的文件上传到mongodb或本地磁盘请帮我解决这个问题?
当文件被上传为结果,但它不上传到文件夹和node.js控制台我得到“.write(字符串,编码,偏移,长度)不推荐使用。使用write(string [,offset [ ,长度]] [,编码])而不是.multer“
答案 0 :(得分:1)
您始终可以使用mongoose来保存文件信息。准备架构的架构调用并执行此
//call for the mongoose schema
//example :var emp = require('../models/employees.js');
app.post('/api/photo',function(req,res){
upload(req,res,function(err) {
if(err) {
return res.end("Error uploading file.");
}
var upl = new emp({picture: req.file.originalname});//creating object the mongoose schema
upl.save(function(err,docs) {
if (err) {
console.log(err);
}
res.json(docs);
});
res.end("File is uploaded");
}); });
答案 1 :(得分:0)
请更具体地说明您使用此代码遇到的问题。对我来说代码似乎很好。 你能把文件上传到./uploads吗? 我假设您要保存文件详细信息而不是物理文件 上传(req,res,function(err){ if(错误){ return res.end(&#34;上传文件时出错。&#34;); } //这里是您可以放置代码以使用req.file或req.files对象将文件详细信息保存到db的位置 res.end(&#34;文件上传&#34;); }); 还要确保在调用帖子之前创建了uploads文件夹根据文档,multer不会创建指定的文件夹(如果它已经存在)。(令人惊讶的是它无声地失败并给出成功消息)