向服务器上传文件

   模拟form表单
 
前端:
 
var formData = new formData();//自带的函数
formData.append('_id','对应的文本内容');//文本
formData.append('companyName',对应的文本内容);//文本
formData.append('companyScale',对应的文本内容);//文本
formData.append('companyLogo',this.companyLogo_model[0].files[0]);//('companyLogo',要上传的对应文件信息),以图片为例
//通过ajax上传
$.ajax({
    type : 'post',
    data : formData,
    contentType : false,//contentType与processData为false不可缺
    processData : false,
    success : $.proxy(this.handleModifySucc,this))//上传成功后的回调函数
})
handleModifySucc: function(data){
    console.log(data);//输出后端返回的值,用于其他操作
}

  

后端
 
controller层:
//获取前端换过来的数据
const ModifyCompany = (req,res)=>{
    let {companyName,companyScale} = req.body; //获取文本信息 ,get传过来的用req.query;post 传过来的用req.body接收
    let urlpath = req.files.companyLogo[0].path.replace(/\\/,'/');//获取文件信息, 路径格式有问题,将'\'转为'/'
    
    companyModel.updateCompany({_id},{
        companyName,s
        companyScale,
        companyLogo : urlpath
    },result=>{
        if(result.ok){
            res.json({  //传给前端的数据
                status : true,
                info : '更新成功'
            })
        }else{
            res.json({
                status : false,
                info : '更新失败'
            })
        }
    })
}

 

 

Model层的companyModel的部分内容:
 
var Company = mongoose.model('cpmpany',{
    companyName,
    companyScale,
    companyLogo
})
//数据库修改的函数    id,companyInfo传的都是对象
const updateCompany = function(id,companyInfo,cb){
    Company.update(id,{$set:companyInfo},(result)=>{
        cb(result);
    })
}
//导出模块
module.exports = {
    updateCOmpany
}

  

router层部分内容:

var express = require('express');
var route = express.Router();

var companyController = require('../controller/company');
var multer = require('multer');   //需要局部安装multer  cnpm install multer -S

//开始
var storage = multer.diskStorage({
    //第一个是文件存储在服务器的位置
    destination : function(req,file,cb){
        cb(null,'./public/img');
    },
    //第二个是文件命名
    filename : function(req,file,cb){
        cb(null,Date.noe() + '-' + file.originalname);//因为上传的文件名可能会有冲突,为了保证每个名字都是独一无二的,便为他们加上时间戳
    }
})

var upload = multer({storage : storage});
//规定当字段可以接受图片一次做多可传多少张
var cpUpload = upload.fileds([{name : 'companyLogo',maxCount : 1}]);

route.post('/modifyCompany',cpUpload,companyController.modifyCompany);//cpUpload不能丢,否则后端不能接收到数据

module.exports = router;

  

 
posted @ 2019-01-17 10:20  AlisaWj  阅读(460)  评论(0编辑  收藏  举报