图文上传

2021-04-13  本文已影响0人  冰落寞成

同时上传商品信息和商品图片

效果如下


image.png

新增&更新接口如下:

/**
 * 添加商品
 * @param {object} data
 * @param {*} config
 * @returns 无
 */
export function addGoods (data, params, config) {
  var configs = {
    headers: { 'Content-Type': 'multipart/form-data' }
  }
  return postFile('/Product/add', data, params, configs)
}
/**
 * 更新商品
 * @param {*} data
 * @param {*} config
 * @returns
 */
export function updateGoods (data, params, config) {
  var configs = {
    headers: { 'Content-Type': 'multipart/form-data' }
  }
  return postFile('/Product/update', data, params, config)
}

商品信息放在params 里面,file 放到data 里面,页面使用的是element的上传组件
element 代码如下:

<el-upload
            class="upload-wrap"
            action="#"
            drag
            :show-file-list="false"
            :on-change="uploadFile"
            accept="image/gif, image/jpeg,image/png"
            :auto-upload="false">
            <div class="target-img-wrap" v-if="uploadImg">
              <div class="mark" @click.stop="markClickFun">
                <i class="el-icon-delete del-icon" @click.stop="deleteImgFun"></i>
              </div>
              <div class="upload-img-wrap">
                <img :src="uploadImg" alt="">
              </div>
            </div>
            <div slot="default" class="upload-btn">
              <i class="el-icon-upload"></i>
            </div>
          </el-upload>

样式代码如下:

/**
图片上传
*/
.target-img-wrap{
  position: relative;
  width: 100%;
  height: 100%;
  overflow: hidden;
  .mark{
    position: absolute;
    top:0;
    left:0;
    bottom: 0;
    right: 0;
    background: rgba(0,0,0,.5);
    color: #fff;
    z-index: 99999;
    display: none;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    .del-icon{
      width: 50px;
      height: 50px;
      font-size: 20px;
      text-align: center;
      line-height: 50px;
      cursor: pointer;
    }
  }
  .upload-img-wrap{
    width: 100%;
    height: 100%;
    img{
      width: 100%;
      height: 100%;
    }
  }
  &:hover{
    .mark{
      display: flex;
      // pointer-events: none;
    }
  }
}

element 得到file文件流代码如下:

/**
     * 图片上传到本地展示
     */
    uploadFile (file, fileList) {
      let files = file.raw
      const fileType = files.type
      const isImage = fileType.indexOf('image') !== -1
      const isLt2M = files.size / 1024 / 1024 < 2
      // 这里常规检验,看项目需求而定
      if (!isImage) {
        this.$message.error('只能上传图片格式png、jpg、gif!')
        return
      }
      if (!isLt2M) {
        this.$message.error('只能上传图片大小小于2M')
      }
      var reader = new FileReader()
      reader.onload = (evt) => {
        this.uploadImg = evt.target.result
      }
      reader.readAsDataURL(files)
      this.fileLoad = new FormData()
      this.fileLoad.append('file', files)
    },

新增上传接口调用

addGoods(this.fileLoad, this.ruleForm).then(res => { // 新增
              this.$emit('addBack', res)
            })

更新上传接口调用如下:

if (!this.fileLoad) { // 如果不更新图片,上传一个空的file,可使用blob 来建一个空的二进制流
              this.fileLoad = new FormData()
              this.fileLoad.append('file', new Blob())
            }

            updateGoods(this.fileLoad, this.ruleForm).then(res => { // 编辑
              this.$emit('addBack', res)
            })
 this.fileLoad.append('file', null)

这种写法是错误的

上一篇下一篇

猜你喜欢

热点阅读