【问题标题】:how to upload the image to folder using nodejs and save the path into mongodb?如何使用nodejs将图像上传到文件夹并将路径保存到mongodb?
【发布时间】:2015-10-10 14:54:24
【问题描述】:

我想使用 angularjs 或 html5、Express.jsjs 和 mongodb 上传图片。我已按照教程进行操作,我无法将图片上传到上传文件夹,请有人帮助我如何做到这一点。下面我给出了我的架构代码

my schema
var UserSchema = new Schema({
    UserName: {
        type: String,
        default: '',
        trim: true,
    },
    Avatar: {
        type: String,
        default: '',
        trim: true

    },
    Email: {
        type: String,
        default: '',
        trim: true
    },
    Password: {
        type: String,
        default: '',
        trim: true
    }
});

我想上传带有用户详细信息的图片

<form action="/upload" method="post" enctype="multipart/form-data">
    Select file to upload:
    <input type="file" name="Avatar" id="fileToUpload">
    <input type="text" name="UserName" id="name">
    <input type="email" name="Email" id="email">
    <input type="password" name="Password" id="password">
    <input type="submit" value="Upload File" name="submit">
</form>

我想将图像存储到某个文件夹(如上传和路径)的另一件事应该存储在数据库中。帮帮我。感谢您的回复

【问题讨论】:

  • 你能试试github.com/balderdashy/skipper - 对我来说就像一个魅力。
  • 请您分享您的路线和控制器
  • 上传后我收到这样的回复 {"message":"0 个文件上传成功!","files":[]}

标签: angularjs node.js html mongodb express


【解决方案1】:

有一个名为skipper 的小节点模块可以处理文件上传。安装它:npm install skipper --save。由于您使用的是 express,因此您的主文件应如下所示:

var express = require('express');
var app = express();

app.use(require('skipper')());

app.post('/upload', function (req, res) {
  req.file('avatar').upload(function (err, uploadedFiles) {

  if (err) return res.send(500, err);
    return res.json({
      message: uploadedFiles.length + ' file(s) uploaded successfully!',
      files: uploadedFiles
    });
  });
});

您的 html 表单应如下所示:

<form action="/upload" method="post" enctype="multipart/form-data">
    Select file to upload:
    <input type="file" name="avatar" id="fileToUpload">
    <input type="submit" value="Upload File" name="submit">
</form>

注意:此路由会返回 json 对象。

【讨论】:

  • 可以上传文件夹或数据库的地方
  • 请查看skipper中的选项:github.com/balderdashy/skipper#options
  • 上传后我收到这样的响应 {"message":"0 个文件上传成功!","files":[]}
  • 由于某种原因文件没有上传。打印所有内容以找出问题所在并仔细检查名称和路径。还要确保您在上传文件夹中具有写入/读取权限。
  • 我可以得到除了路径之外的所有东西
【解决方案2】:

您可以使用 nodejs 强大和 fs-extra 模块来创建文件夹以在您的应用程序中存储图像。试试这个

var fs = require('fs-extra');
var formidable = require('formidable');
var EmpDetail   = require('../models/employee.model.js');//This line means that I am having my schema code.
var    util = require('util');


app.route('/upload').post(function(req,res){

res.json({success:true});

var empData = new EmpDetail();//Here I created object to call my schema values.

var form   =  new formidable.IncomingForm();
console.log(req.body,'req.body');
form.parse(req,function(err,fields,files){
    console.log('dfgbfbf');
    util.inspect({fields: fields, files: files});
});

form.on('field',function(name,value){//This means your html input fields
    console.log('fields',name,value);
    if(name == 'fullName'){
        console.log('here',value);
        empData.fullName = value;
    }
    if(name == 'fatherName'){
        empData.fatherName = value;
    }
    if(name == 'dt'){
        empData.DOB = value;
    }
});
form.on('file',function(field, file){//This means on click of file it gets that file.
    console.log(file.name,'hjgjg');
    var temp = file.path;
    console.log(temp,'temp',file.name);
    var fileName = file.name;
        var fileName = file.name;
        var location     = 'images/';
        var cpLocation   = 'empDetails/images/';
        empData.imgSize = file.size;
        empData.imgType = file.type;
        empData.picFile = location+fileName;//Here PicFile is name of Avatar in model
fs.copy(temp,cpLocation+fileName ,function(err){//This means it create a folder and name of the image in your app.
        if(err)
        {
            console.log(err);
        }
    });

});
form.on('end',function(fields, files){

        empData.save(function(err,resobj){
            if(err)
            {    
               throw err;
            }
        });
});
});

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多