如何使用node.js上传文件并将其存储在mongodb中?

时间:2016-04-05 14:05:28

标签: javascript node.js mongodb express multer

我想从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>&nbsp;
    <button class="redButton">Create</button>-->
    <input type="submit" value="Upload Image" name="submit">
  </div>
</form>

我想将用户选择的文件上传到mongodb或本地磁盘请帮我解决这个问题?

当文件被上传为结果,但它不上传到文件夹和node.js控制台我得到“.write(字符串,编码,偏移,长度)不推荐使用。使用write(string [,offset [ ,长度]] [,编码])而不是.multer“

2 个答案:

答案 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不会创建指定的文件夹(如果它已经存在)。(令人惊讶的是它无声地失败并给出成功消息)