element-plus Upload组件加了v-model属性导致本地图片能回显,在服务器上图片不能回显问题

场景:使用upload组件,调用后端上传图片接口,将接口返回的图片路径放到 el-image 中实现回显

问题:在开发环境调试过程中,图片可正常回显。代码部署到线上环境服务器后,上传成功,返回的图片路径在浏览器可正常打开,但就是无法回显图片

代码:

父组件代码

<imgUpload :size="1024*5" :fileList="TData.fileList" />

<script setup lang="ts">
import imgUpload from '../components/imgUpload/index.vue'

const TData=reactive({
    fileList:[] as any[],
})

async function httpRequest(v:any){
    const newForm = new FormData()
    newForm.append('file',v.file)
    const {data,code} = await oosImgUpload(newForm)
    if(code==200){
        ElMessage({
            type:"success",
            message:'上传成功'
        })
        const {ossId,fileName,url,prefixPath} = data
        cooperateFormData.feiles.push({
            "photoFile":url+"\\"+fileName,
            "ossId":ossId,
            "showPhoto":"N"
        })
        let baseUrl = window.location.protocol+'//'+window.location.host
        imgObjFun({
            ossId:ossId,
            fileName:fileName,
            url:(baseUrl.includes('http://localhost') ? 'http://10.118.2.186:31200/' : baseUrl) +prefixPath+'/'+url+'/'+fileName,
            uid:v.file.uid
        })
    }
}
function imgObjFun(v:any){
    let obj:any = {
        imageId:v.ossId,
        name:v.fileName,
        uid:v.uid,
        url:new URL(v.url).href, //v.url,
        checked:false
    }
    TData.fileList.push(obj)
    console.log('上传后返回数据',TData.fileList)
}
</script>

子(上传)组件代码

<template>
    <!-- :before-remove="beforeRemove" -->
    <div class="imgUpload">
       <div class="imgUpload-main">
        <div class="imgUpload-imgList" v-for="(itm,idx) in props.fileList" :key="idx" >
            <el-image class="imgUpload-img"  :src="itm.url" />
            <el-checkbox class="imgUpload-check" @change="changeCheck(itm)" v-model="itm.checked" size="large" />
            <div class="imgUpload-ask"  @click="handleRemove(itm)">
                <el-icon><Delete /></el-icon>
            </div>
            <!-- {{ itm }} -->
        </div>
            <el-upload
                v-show="!props.fileList || props.fileList.length<3 "
				:v-model="props.fileList"  // 加了这个导致线上环境图片无法回显,删除此属性问题解决
                :limit="3"
                :show-file-list="false"
                :http-request="httpRequest"
                :on-preview="handlePictureCardPreview"
                >
        <el-icon><Plus /></el-icon>
        </el-upload>
       </div>
    </div>
</template>

<script lang="ts" setup>
const props = defineProps({
    fileList:{
        type:Array as PropType<any[]>,
        default:()=>[]
    },
    size:{
        type:Number,
        default:'10' //单位k
    }
})

async function httpRequest(v:any){
    return new Promise<any>(async(resolve, reject) => {
        if(v.file.size/1024 > props.size){
            ElMessage({
                type:'warning',
                message:`上传图片大小不能超过 ${ props.size/1024 >1 ? (props.size/1024 + 'M') :(props.size+'K')}`
            })
            reject() 
        }else{
            $emit('httpRequest',v)
        }
    })
}
//移除文件
const handleRemove = (file:any) => {
    $emit('removeFile',file.imageId)
}

function changeCheck(v:any){
    $emit('changeCheck',v)
}
const $emit=defineEmits(['httpRequest','removeFile','changeCheck'])
</script>

问题在于 el-upload 中,加了v-model属性导致,问题代码如下所示

<el-upload
   v-show="!props.fileList || props.fileList.length<3 "
   :v-model="props.fileList"  // 加了这个导致线上环境图片无法回显,删除此属性问题解决
   :limit="3"
   :show-file-list="false"
   :http-request="httpRequest"
   :on-preview="handlePictureCardPreview"
   >
  <el-icon><Plus /></el-icon>
</el-upload>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用element-plus、ts和vue3实现上传多张图片回显,可以按照以下步骤操作: 1. 首先,安装element-plus和vue3的相关依赖。可以使用npm或yarn安装element-plus和vue3的依赖包。 2. 在项目中创建一个上传组件,可以使用element-plus提供的el-upload组件实现。在组件中,引入和注册el-upload组件。 3. 组件中,声明一个data属性,用于存储图片文件和回显图片列表。可以使用ref或reactive创建响应式数据。 4. 在template模板中,使用el-upload组件,设置一些必要的属性,如action、listType和multiple等。通过action属性指定上传的地址,listType属性设置为"picture-card"以展示上传的图片,并且通过multiple属性支持上传多张图片。 5. 设置el-upload组件的onSuccess和beforeRemove事件,用于在成功上传图片或删除图片时触发相应的逻辑。在onSuccess事件中,将上传的文件添到data属性中的图片文件列表中;在beforeRemove事件中,通过索引将要删除的图片从data属性中的图片文件列表中移除。 6. 在组件中,使用v-for指令遍历图片文件列表,并使用el-image组件展示回显图片el-image组件element-plus提供的用于展示图片组件。 7. 最后,在应用的父组件中,使用刚刚创建的上传组件。使用v-model指令绑定父组件中的数据,以获取上传成功后的图片文件。 通过以上步骤,就可以实现使用element-plus、ts和vue3上传多张图片回显的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值