乘风原创程序

  • Vue如何使用Element-ui表单发送数据与多张图片到后端详解
  • 2022/4/8 15:16:26
  • 在做项目的时候遇到一个问题,前端需要上传表单到后端,表单数据包括文本内容和图片,后端我用的是nodejs,效果类似下图

    前端需要向后端传商品名称,价格,描述,商品图片

    前端准备,利用element-ui中的表单功能和上传功能,将upload代码嵌套在表单中,代码如下

    <template>
        <div class="content">
          <div class="form">
            <el-form ref="form" :model="form" label-width="80px">
               <el-form-item label="商品名称">
                <el-input v-model="form.name"></el-input>
              </el-form-item>
              <el-form-item label="商品价格">
                <el-input v-model="form.price"></el-input>
              </el-form-item>
              <el-form-item label="商品描述">
                <el-input v-model="form.description"></el-input>
              </el-form-item>
              <el-form-item>
               <el-upload
                action="/api/users/addproduct"
                list-type="picture-card"
                :on-preview="handlepicturecardpreview"
                :on-remove="handleremove"
                :before-upload="beforeproductupload">
                <i class="el-icon-plus"></i>
              </el-upload>
            <el-dialog :visible.sync="dialogvisible">
              <img width="100%" :src="dialogimageurl" alt="">
            </el-dialog>
             </el-form-item>
             <el-form-item>
                <el-button type="primary" @click="submit">立即创建</el-button>
                <el-button>取消</el-button>
              </el-form-item>
            </el-form>
          </div>
           
        </div>
    </template>

    需要注意的是,upload中的action传的是对应的后端接口

    在上传图片前,需要先将图片转成base64格式的字符串后再上传给后端,这里定义了 beforeproductupload函数进行转码处理

     beforeproductupload(file){
              var _this = this
            return new promise(function(resolve, reject) {
              var reader = new filereader()
             reader.readasdataurl(file)// 这里是最关键的一步,转换成base64
              reader.onload = function(event) {
                _this.form.imageurl.push(event.target.result) //定义参数获取图片路径
              }
            })

    script部分的代码

     
    <script>
      export default {
        data() {
          return {
              form: {
           	  name:'',
              imageurl:[],
              price:'',
              description:''
             },
            dialogimageurl: '',
            dialogvisible: false
          };
          
        },
        methods: {
          handleremove(file, filelist) {
            //移除图片
            console.log(file, filelist);
          },
          handlepicturecardpreview(file) {
            //图片预览
            this.dialogimageurl = file.url;
            this.dialogvisible = true;
          },
          beforeproductupload(file){
              var _this = this
            return new promise(function(resolve, reject) {
              var reader = new filereader()
             reader.readasdataurl(file)// 这里是最关键的一步,转换成base64
              reader.onload = function(event) {
                _this.form.imageurl.push(event.target.result) //定义参数获取图片路径
              }
            })
            
          },
          submit(){
            var form = {
              name:this.form.name,
              imgdata: this.form.imageurl,
              price:this.form.price,
              description:this.form.description
            } 
            this.$axios.post('/api/users/addproduct',form).then(res=>{
                console.log(res.data)
                this.$message('发布成功')
                this.form = ''
                console.log('上传成功')
            })
          }
        }
      }
    </script>

    定义一个imageurl数组来接收传入的图片base64码,然后在保存在form对象中传过去给node后端保存到数据库中,这里我用的是mongodb数据库,可以看到数据已经传到数据库了,imgdata就是存放图片base64的对象。

     自此已成功完成该问题

    总结

    到此这篇关于vue如何使用element-ui表单发送数据与多张图片到后端的文章就介绍到这了,更多相关vue用element-ui发送数据到后端内容请搜索本教程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持本教程网!