向服务器上传文件
模拟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;