element-ui 上传图片,图片404

8 篇文章 0 订阅

介绍背景:

使用element-ui vue,在页面中填写商品信息并保存后,上传商品相关图片。图片存放到阿里云上。如上传两张图片,图片命名为goodsId-01.jpg和goodsId-02.jpg

出现的问题:

新建商品时-图片显示:

商品信息保存成功的那一刻,图片变成:

问题原因:

因为图片默认显示路径下没有图片。所以显示小碎图。

---------------------------------

展示小碎图代码代码→:

<template> 标签中

<div class="container">
    <div class="form-box">
        <el-form ref="form" :model="form" label-width="2500px">  
            <el-row >  
                <el-col :span="20" >     
                    <span>{{this.form.goodsName}}</span><br><br> 
                    <div style="height:50px;font-size:13px;color: #8c939d;">
                        <div>第一张图  http://阿里云存图片路径/{{this.form.goodsId}}-01.jpg<br/></div><br/>
                    </div>
                    <div style="width:400px;">  
                        // 利用:data="goodsIdStr"传参,用于后台命名,如果命名不需要传参可以省略                     
                        <el-upload class="avatar-uploader" :headers="headerObj" action="/上传访问后台方法路径" :show-file-list="false" :on-success="handleAvatarSuccess" 
                            :data="goodsIdStr" :before-upload="beforeAvatarUpload" >
                            <img v-if="indexPicture" :src="indexPicture" class="avatar" style="width:200px;height:200px;border-radius: 6px;border: 4px solid #DFDFDF;">
                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                        </el-upload>
                    </div>  
                </el-col>
                <el-col :span="4">     
                    <span> </span><br><br>          
                    <div style="height:50px; font-size:13px; color:#8c939d; width:500px;">
                        <div>第二张图  http://阿里云存图片路径/{{this.form.goodsId}}-02.jpg</div><br/>
                    </div>
                    <div style="width:400px;">                       
                        <el-upload class="avatar-uploader" :headers="headerObj" action="/上传访问后台方法路径" :show-file-list="false" :on-success="handleAvatarSuccess1" 
                            :data="goodsIdStr" :before-upload="beforeAvatarUpload" >
                            <img v-if="rockOne" :src="rockOne" class="avatar" style="width:200px;height:200px;border-radius: 6px;border: 4px solid #DFDFDF;">
                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                        </el-upload>                          
                    </div>  
                </el-col>
            </el-row>
        </el-form>
    </div>
</div>

script的create()中

return {
	if (goodsId != null && goodsId != '' && goodsId !=undefined) {
		this.img1 = "http://阿里云存图片路径/"+goodsId+"-01.jpg?random="+Math.random();
		this.img2 = "http://阿里云存图片路径/"+goodsId+"-02.jpg?random="+Math.random();
	}
},

methods中

handleAvatarSuccess(res, file) {
    this.img1 = URL.createObjectURL(file.raw);
},
handleAvatarSuccess1(res, file) {
    this.img2 = URL.createObjectURL(file.raw);
},
// 上传图片
beforeAvatarUpload(file) {                   
    const isJPG = file.type === 'image/jpeg';
    const isLt2M = file.size < 71680;
    this.goodsIdStr.goodsId = this.form.goodsId; // 利用goodsIdStr传参,用于后台命名,如果命名不需要传参可以省略
    if (!isJPG) {
        this.$message.error('上传图片只能是 JPG 格式!');
    }
    if (!isLt2M) {
        this.$message.error('上传图片大小不能超过 70KB,请调整清晰度之后再试!');
    }
    return isJPG && isLt2M;
},

--------------------

解决:

在<template> 标签中,@error="indexPictureError(indexPicture)",表示出错的时候访问方法,可以直接写默认图片的路径。我是直接给空。

<div class="container">
    <div class="form-box">
        <el-form ref="form" :model="form" label-width="2500px">  
            <el-row >  
                <el-col :span="20" >     
                    <span>{{this.form.goodsName}}</span><br><br> 
                    <div style="height:50px;font-size:13px;color: #8c939d;">
                        <div>第一张图  http://阿里云存图片路径/{{this.form.goodsId}}-01.jpg<br/></div><br/>
                    </div>
                    <div style="width:400px;">                       
                        <el-upload class="avatar-uploader" :headers="headerObj" action="/上传访问后台方法路径" :show-file-list="false" :on-success="handleAvatarSuccess" 
                            :data="goodsIdStr" :before-upload="beforeAvatarUpload" >
                            <img v-if="indexPicture" :src="indexPicture" class="avatar" style="width:200px;height:200px;border-radius: 6px;border: 4px solid #DFDFDF;" @error="indexPictureError(indexPicture)">
                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                        </el-upload>
                    </div>  
                </el-col>
                <el-col :span="4">     
                    <span> </span><br><br>          
                    <div style="height:50px; font-size:13px; color:#8c939d; width:500px;">
                        <div>第二张图  http://阿里云存图片路径/{{this.form.goodsId}}-02.jpg</div><br/>
                    </div>
                    <div style="width:400px;">                       
                        <el-upload class="avatar-uploader" :headers="headerObj" action="/上传访问后台方法路径" :show-file-list="false" :on-success="handleAvatarSuccess1" 
                            :data="goodsIdStr" :before-upload="beforeAvatarUpload" >
                            <img v-if="rockOne" :src="rockOne" class="avatar" style="width:200px;height:200px;border-radius: 6px;border: 4px solid #DFDFDF;" @error="rockOneError(rockOne)">
                            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                        </el-upload>                          
                    </div>  
                </el-col>
            </el-row>
        </el-form>
    </div>
</div>

methods中加入方法:

indexPictureError(indexPicture) {
    this.indexPicture= '';
},

=================

以下是保存商品,生成goodsId之后,上传一张图片的样式

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

el-upload标签属性

action:访问后台路径

:on-success:上传成功后访问的方法

:data:上传图片往后边传参

:before-upload:上传之前访问的方法(验证图片)

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荼蘼_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值