【element-UI】el-upload本地上传图片,点击提交,表单和图片文件一起上传,使用formdata对象上传

el-upload本地上传图片,点击提交表单和图片文件一起上传

项目需求:表单中有一项上传照片,上传时先存在本地(即先不提交)

需求效果如下图:
在这里插入图片描述

解决代码

因为后端要求图片需要和其他参数一起提交,使用formdata对象携带参数,通过设置el-upload中action参数值为#,以及auto-upload(是否在选取文件后立即进行上传)为false

<el-upload
	action="#"
	:show-file-list="false"
   	:auto-upload="false"
    :multiple="false"
    :on-change="uploadFile"
    drag
    accept="image/jpg,image/jpeg,image/png">
    <i v-if="imageUrl" class="el-icon-circle-close deleteImg" @click.stop="handleRemove"></i>
    <img v-if="imageUrl" :src="imageUrl" class="el-upload--picture-car" />
    <div v-else>
    	<i class="el-icon-picture" style="margin-top: 40px; font-size: 40px; color: #999a9c"></i>
      	<div>上传图片</div>
       	<div>格式为png、jpeg或jpg</div>
   	</div>
</el-upload>
<el-button type="primary" @click="submitOrder">确 定</el-button>
<script>
  import { setOrderStatus } from '接口路径'
  export default {
    data() {
      return {
        formData: "",
        imageUrl: ""
        orderId: "",
        userId: "",
        userName: ""
      }
    },
    methods: {
      // 上传图片
      uploadFile(item) {
	    this.formData = item.raw; // 图片文件
	    this.imageUrl = URL.createObjectURL(item.raw); // 图片上传浏览器回显地址
	    console.log(this.imageUrl, "imageUrl")
	    console.log(this.formData, "formData")
      },
      handleRemove() {
	    this.imageUrl = ""
	  },
	  submitOrder() {
        var formData = new FormData();
        formData.append("photoFile", this.formData);  // 照片文件
        formData.append("orderId", this.orderId); // 其他参数
        formData.append("userId", this.user.id); // 其他参数
        formData.append("userName", this.user.username); // 其他参数
        setOrderStatus(formData).then(res => {
          console.log(res)
        }, err => {
          console.log(err)
        })
	  }
    }
  }
</script>
<style scoped>
.deleteImg {
    font-size: 30px;
    position: absolute;
    top: 0;
    right: 0;
    z-index: 999;
}
img {
    width: 100%;
    height: 100%;
    background-repeat: no-repeat;
}
</style>

接口api

export function setOrderStatus(data) {
  return request({
    url: `api/order/status`,
    method: 'post',
    data,
    headers: {
      'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundarynl6gT1BKdPWIejNq'
    }
  })
}
Element Plus 是一个基于 Vue 3 的组件库,其中包含了丰富的 UI 组件,包括文件上传组件 `ElUpload`。通过使用 `ElUpload` 组件,用户可以方便地上传文件,并且还可以与表单一起提交文件数据。 在 Element Plus 中,`ElUpload` 组件提供了两种文件上传模式:`button` `drag`。你可以通过设置 `action` 属性来指定上传的服务器地址。当用户选择文件后,可以通过事件来获取这些文件,并将它们添加到表单数据中进行提交。 以下是使用 Element Plus 的 `ElUpload` 组件进行文件上传提交表单的基本步骤: 1.Vue 组件中引入 `ElUpload` 组件。 2. 设置 `ElUpload` 的 `action` 属性为你的上传接口地址。 3. 使用 `before-upload` 钩子函数来处理文件上传前的逻辑,比如校验文件类型大小。 4. 使用 `on-success` 或 `on-error` 钩子函数来处理文件上传成功或失败后的逻辑。 5. 在 `ElForm` 表单中添加 `ElUpload` 组件,并确保表单有正确的提交机制,比如监听表单提交事件,并在事件处理函数中处理上传后的逻辑。 6.表单提交时,`ElUpload` 会自动将已上传文件列表作为表单数据的一部分一起发送到服务器。 示例代码如下: ```html <template> <el-form ref="form" @submit.native.prevent="handleSubmit"> <el-upload action="你的上传接口地址" :before-upload="beforeUpload" :on-success="handleSuccess" :on-error="handleError" list-type="picture"> <el-button size="small" type="primary">选取文件</el-button> </el-upload> <el-form-item> <el-button type="primary" native-type="submit">提交</el-button> </el-form-item> </el-form> </template> <script> export default { methods: { handleSubmit() { // 获取表单引用并调用提交方法 this.$refs.form.validate((valid) => { if (valid) { // 表单验证通过后,可以在这里发送请求将数据提交到服务器 // 由于 Element Plus 会自动处理文件上传,所以这里的 data 应该是表单中剩余的数据 const formData = new FormData(); // 添加其他表单数据到 formData... // 最后,使用 axios 或者原生 fetch 发送请求 } }); }, beforeUpload(file) { // 文件上传前的逻辑 // 返回 false 可以阻止上传 return true; }, handleSuccess(response, file, fileList) { // 文件上传成功的处理逻辑 console.log('上传成功', response, file, fileList); }, handleError(err, file, fileList) { // 文件上传失败的处理逻辑 console.error('上传失败', err, file, fileList); } } }; </script> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值