欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue实现的上传图片到数据库并显示到页面功能示例

程序员文章站 2022-03-13 11:47:00
本文实例讲述了vue实现的上传图片到数据库并显示到页面功能。分享给大家供大家参考,具体如下: 1、点击上传图片,弹出选择图片选项框。 页面代码:

本文实例讲述了vue实现的上传图片到数据库并显示到页面功能。分享给大家供大家参考,具体如下:

1、点击上传图片,弹出选择图片选项框。

页面代码:

<div class="form-signin-heading" id="btnupload" @change="upload">上传图片</div>
<input type="file" name="avatar" id="avatar" multiple="multiple" @change="upload">
<img :src="'http://localhost:8888'+item.photos_url" alt=""/>

由于我们要设置上传图片的样式,所以把input隐藏,并要做如下操作把input的点击事件给div框:

mounted: function () {
 var upload = document.getelementbyid("btnupload");
 var avatar = document.getelementbyid("avatar");
 upload.onclick =function(){
  avatar.click(); //注意ie的兼容性
 };
}

2、在api接口的controller层加入两个文件,命名自己定,如:

upfile.js

let multer=require('multer');
let storage = multer.diskstorage({
  //设置上传后文件路径,uploads文件夹会自动创建。
  destination: function (req, file, cb) {
    cb(null, './public/uploads')
  },
  //给上传文件重命名,获取添加后缀名
  filename: function (req, file, cb) {
    let fileformat = (file.originalname).split(".");
    cb(null, file.fieldname + '-' + date.now() + "." + fileformat[fileformat.length - 1]);
  }
});
//添加配置文件到multer对象。
let upload = multer({
  storage: storage
});
module.exports = upload;

upfilecontroller.js

var muilter = require('./upfile.js');
//multer有single()中的名称必须是表单上传字段的name名称。
var upload=muilter.single('file');
function datainput(req, res) {
  upload(req, res, function (err) {
    //添加错误处理
    if (err) {
      return console.log(err);
    }
    //文件信息在req.file或者req.files中显示。
    let photopath = req.file.path;
    photopath = photopath.replace(/public/,"");//将文件路径中的public\去掉,否则会和静态资源配置冲突
    //将photopath存入数据库即可
    console.log(photopath);
    res.send(photopath);
  });
}
module.exports = {
  datainput
};

3、在页面中将图片的地址存到数据库

upload: function (e) {
    var that = this;
    let formdata = new window.formdata();
    let file = e.target.files[0];
    formdata.append('file',file);//通过append向form对象添加数据
    //利用split切割,拿到上传文件的格式
    var src = file.name,
     formart = src.split(".")[1];
    //使用if判断上传文件格式是否符合
    if (formart == "jpg" || formart == "png" ||
     formart == "docx" || formart == "txt" ||
     formart == "ppt" || formart == "xlsx" ||
     formart == "zip" || formart == "rar" ||
     formart == "doc") {
     //只有满足以上格式时,才会触发ajax请求
     this.$axios.post(this.$api.personalcenter.upfile,formdata).then(function (res) {
      that.upfiledata = res.data;
     }).then(function (res) {
      var params = {
       photos_url: that.upfiledata,
       photo_des: ''
      };
//      console.log(params.photos_url,'photos_url')
      that.$axios.post(that.$api.personalcenter.walladd,qs.stringify(params)).then(function (res) {
       console.log(res.data);
       that.$options.methods.imglist.bind(that)();
      }).catch(function (err) {
       console.log(err);
       console.log("请求出错");
      })
     })
    } else {
     alert("文件格式不支持上传");
    }
}

希望本文所述对大家vue.js程序设计有所帮助。