element-plus组件Upload 上传图片(超详细)

先放代码,下面做字段详细解释

以下使用场景为:修改表单数据,表单中包含图片。

js 复制代码
<el-upload 
    :action="uploadImg" 
    multiple 
    :headers="headers"
    :on-success="(response, file, fileList) => successUpload(item.name,response,file,fileList)"
    :on-error="errorUpload" 
    :limit="4" 
    list-type="picture-card"
    :file-list="localFormData[item.name]"
    :on-remove="(file, fileList) => handleRemove(file, fileList, item.name)"
    :on-preview="handlePictureCardPreview">
            //自定义图标/提示文字
           <img src="/images/ticketForm/camera.png" />
           <div class="add-picture">
                     <el-icon><Plus /></el-icon>
                     <span>添加图片</span>
           </div>
   </el-upload>
   <el-dialog v-model="dialogVisible">
            <img w-full :src="dialogImageUrl" alt="Preview Image" class="img-box" />
   </el-dialog>
   //js
   import { uploadImg } from '@/api/system/system'//上传图片的接口
   import { useUser } from '@/store/user'
   const userStore = useUser()
   const token = userStore.getToken()
   const headers = ref({
    "x-access-token": token
    })
    const dialogVisible = ref(false)
    const dialogImageUrl = ref('')
const successUpload = (name, response, file, fileList) => {
    localFormData[name].push(file.response.result);//localFormData存储表单数据的对象
}
const errorUpload = (error) => {
    console.log(error);
}
// 移除图片
const handleRemove = (file, files, name) => {
    files.forEach(item => {
        if (item.response && item.response.length > 0) {
            item = item.response.result
        }
    })
    localFormData[name] = JSON.parse(JSON.stringify(files));
}
//放大展示
const handlePictureCardPreview = (file) => {
    dialogImageUrl.value = file.url
    dialogVisible.value = true
}

先讲一下这里提交包含图片的表单的逻辑:

1、先上传图片到服务器,服务器会返回一个地址.

2、把服务器返回的地址存放到存放表单的变量中,再提交表单数据即可。

upload组件相关属性解释:

action:上传图片的接口地址。

multiple:是否支持多选文件。

headers:请求接口的请求头。

on-success:文件上传成功的回调。

on-error:文件上传失败时的回调。

on-remove:文件移除时的回调。

on-preview:点击文件列表中已上传的文件时的回调。

limit:最大上传文件数。

list-type:文件列表的类型。

file-list:默认上传文件(等于v-model:file-list可以设置默认上传的图片,或者用来展示该字段原有的图片.如果只是新增表单可以不用写该字段,这里是用来修改表单数据时,展示原有数据使用)。

注:

file-list展示的数据格式为(结构不对会显示不出来):

{ name: '', url: ''},{ name: '', url: ''} (name根据情况传入,url必须有)

此部分代码localFormDataname为表单数据存储的对象,使用时根据实际情况修改即可。

相关推荐
pany6 小时前
做 AI 友好的开源 Vue3 模板 🌈
前端·vue.js·ai编程
daols887 小时前
vue 甘特图 vxe-gantt 小时视图设置日期轴每间隔 3 个小时
vue.js·甘特图·vxe-gantt
你挚爱的强哥11 小时前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
卓怡学长13 小时前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
我有满天星辰13 小时前
Vue项目脚手架之争:create-vue与Vue CLI全面对比
前端·javascript·vue.js
Random_index15 小时前
#Vue3篇: Vue 项目发版后如何提示用户刷新?基于 package.json 版本号的前端更新检测方案
前端·vue.js·json
我有满天星辰16 小时前
Vue 2 与 Vue 3 计算属性完全指南:从 Options API 到组合式 API 的演进
前端·javascript·vue.js
用户831348593069817 小时前
Cesium自定义可调节星空夜景+星星闪烁
vue.js·cesium
白露与泡影17 小时前
用 Spring Boot + Vue + Fuzio 构建现代 Java 桌面应用
java·vue.js·spring boot
WindfallSheng19 小时前
从Vibe Coding到Spec Coding:一套可落地的AI-SDD企业级研发实战工程
javascript·vue.js