Vue使用el-upload文件(图片)上传

72 篇文章 4 订阅

1.一般的整体流程就是:咱们选择一个文件点击确定上传后,会上传到服务器(action),这时候服务器会返回给我们一个url(在on-success回调中可以拿到),接下来就是在提交表单的时候将该url传给后端就可以了。

2.但是项目中图片比较的少的时候,服务器可能没有专门存照片的地方,他们会直接存图片,也就是存图片的二进制对象base64编码,然后返回的时候也是返回给前端blob对象

1. 服务器有专门存图片的地方,返回给我们一个路径

<el-form-item label="视频上传" prop="" :rules="[]">
  <el-upload
    class="upload-demo"
    :action="`${this.$http.BASE_URL}/sys/file/webupload/upload?uploadPath=/iot/labor/labourSafeTrain`"
    :on-success="uploadSuccess"
    :before-upload="beforeAvatarUpload"
    :show-file-list="true"
    :limit='1'
    :file-list="videofileList"
  >
    <el-button size="small" type="primary">点击上传</el-button>
    <!-- <div slot="tip" class="el-upload__tip">
      只允许导入“xls”或“xlsx”格式文件!
    </div> -->
  </el-upload>
</el-form-item>
// 上传之前的回调
beforeAvatarUpload(file) {
  const isLt50M = file.size / 1024 / 1024 < 50;
  //const isJPG = fileType === 'image/jpg' || fileType === 'image/jpeg' || fileType === 'image/png'
  if (['video/mp4', 'video/ogg','video/flv','video/avi','video/wmv','video/rmvb'].indexOf(file.type) == -1) {
    this.$message.error('上传视频只能是 mp4、ogg、flv、avi、wmv、rmvb 格式!');
    return false;
  }
  //if (!isJPG) {
  //  this.$message.error('上传图片的格式只能是 JPG或PNG 格式!')
  //  return false
  //}
  if (!isLt50M) {
    this.$message.error('上传视频大小不能超过 50MB!');
    return false;
  }
  return true;
},
// 上传成功的回调
uploadSuccess(obj,res,file) {
  if (obj.success) {
    this.$message.success({dangerouslyUseHTMLString: true,
      message: obj.msg})
    this.inputForm.url = obj.url // 后端返给我们的路径
  } else {
    this.$message.error('操作失败')
  }
},

2.服务器直接存图片的二进制 

这时候我们就用不到上面的action了,需要用到on-change事件,拿到我们上传图片的blob对象,并传给后端 。然后后端也会返回blob对象,我们通过window.URL.createObjectURL转成一个url即可回显图片,这时候注意,图片必须是单独的接口并返回二进制对象,我们在用axios请求的时候一定要将responseType设置为blob才可以。后端不可以将图片的二进制编码放在对象里面的一个字段中,这样前端将无法解析

<el-form-item label="机楼图片" prop="img" :rules="[]">
  <el-upload
    ref="my-upload"
    :class="{ 'upload-img': fileList.length }"
    action="#"
    list-type="picture-card"
    :auto-upload="false"
    :on-change="handleChange"
    :multiple="false"
    :before-upload="beforeAvatarUpload"
    :file-list="fileList"
    :limit="1"
    accept=".png, .jpg, .JPG, .JPEG, .jpeg, .PNG .GIF, .gif"
  >
    <i slot="default" class="el-icon-plus" />
    <div style="width: 100%;height: 100%;" slot="file" slot-scope="{ file }">
      <img
        style="width: 100%;height: 100%;"
        class="el-upload-list__item-thumbnail"
        :src="file.url"
        alt=""
      >
      <span class="el-upload-list__item-actions">
        <span
          class="el-upload-list__item-delete"
          @click="handleRemove(file)"
        >
          <i class="el-icon-delete" />
        </span>
      </span>
    </div>
  </el-upload>
</el-form-item>
data() {
  return {
    inputForm: {
      id: "",
      img: '' // 机楼图片
    },
    fileList: []
  }
}
// 上传之前的回调
beforeAvatarUpload(file) {
  const fileType = file.raw.type
  const isJPG = fileType === 'image/jpg' || fileType === 'image/jpeg' || fileType === 'image/png'
  const isLt20M = file.raw.size / 1024 / 1024 < 20
  if (!isJPG) {
    this.$message.error('上传图片的格式只能是 JPG或PNG 格式!')
  }
  if (!isLt20M) {
    this.$message.error('上传图片的大小不能超过 20M!')
  }
  return isJPG && isLt20M
},
// 移除图片
handleRemove(file) {
  const index = this.fileList.indexOf(file.url)
  this.fileList.splice(index, 1)
},
// 上传图片
handleChange(file, fileList) {
  const isFileType = this.beforeAvatarUpload(file)
  // 如果文件类型不对,则清空表单及附件列表
  if (!isFileType) {
    this.fileList = []
    return
  }
  this.inputForm.img = file.raw  // 这个就是咱们上传图片的二进制对象
  this.fileList = [fileList[0]]
},
  • 11
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue使用el-upload组件来上传图片的步骤如下: 1. 在Vue组件中引入el-upload组件,并添加相应的props和data属性。 2. 在模板中使用el-upload标签,并设置相应的属性,例如action属性指定图片上传的接口地址,list-type属性指定展示上传图片的样式等。 3. 在methods中定义handleAvatarSuccess方法作为上传成功的回调函数,通过该方法获取服务端返回的图片路径,并将其绑定到imageUrl属性上。 4. 在methods中定义beforeAvatarUpload方法作为上传前的验证方法,用于验证图片格式和大小是否符合要求。 5. 在methods中定义handleRemove方法作为删除图片的回调函数,通过该方法从imageList中移除对应的图片对象。 6. 在methods中定义handlePictureCardPreview方法作为图片预览的回调函数,通过该方法设置预览图片的相关属性。 7. 在模板中使用v-if和v-else指令来根据是否有图片路径来展示或隐藏图片。 以上就是使用el-upload组件在Vue上传图片的基本步骤。请根据实际情况进行相应的配置和调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [vue使用element-ui的el-upload上传图片至服务器,服务端使用的是node.js对接受的图片进行处理](https://blog.csdn.net/qq_49042268/article/details/122722395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue el-upload实现图片和文字上传](https://blog.csdn.net/weixin_47978760/article/details/128042608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会说法语的猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值