1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > vue上传文件到服务器 服务端使用node进行接收 并存储到文件系统

vue上传文件到服务器 服务端使用node进行接收 并存储到文件系统

时间:2019-05-23 19:56:44

相关推荐

vue上传文件到服务器 服务端使用node进行接收 并存储到文件系统

1.传输文件需要使用FormData,使用append添加数据

add() {// 发送file文件,需要使用FormData进行传输let formData = new FormData();let file = this.addTable.file;// file对应的是一个file对象formData.append("file", file, "filename.png"); //很重要 data.append("file", file);不成功formData.append("title", this.addTable.title);console.log(formData);addSong(formData).then((res) => {console.log(res);this.$Message.success({content: "添加成功!!",});});},

2.axios发post请求时,需要设置headers为 ‘Content-Type’: ‘multipart/form-data’,还有data不用序列化

export function addSong(data) {return request({url: '/picture/add',data: data ,headers: {'Content-Type': 'multipart/form-data' }})}

3.node配置接口,使用formidable解析FormData

let fs = require("fs");const formidable = require('formidable')exports.addPicture = (req, res) => {// console.log(req.body); //这样访问传入的FormData为空,很正常const form = new formidable.IncomingForm()//要这样解析FormDataform.parse(req, function (err, fields, files) {console.log(fields);//普通类型console.log(files);//file类型let title = fields.titlelet pngPath = new Date().getTime() + '.jpg'// formidable自动生成文件,此时只用复制粘贴文件到自己想要的地方let copiedPath = files.file.filepathlet toPath = path.join(__dirname, '..', '/public/images/') + pngPathconsole.log(copiedPath, toPath);try {fs.copyFileSync(copiedPath, toPath)console.log('success');} catch (error) {console.log(error);}// 插入数据库const sql = `insert picture set ?`let sqlData = {picture:pngPath,date:new Date(),title}db.query(sql, sqlData, (err, result) => {if (err) return res.msg(err)if (result.affectedRows !== 1) return res.msg('发布图片失败!')res.msg('发布图片成功!', 200)})})}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。