运用 ant 图片上传组建 实现pc端图片预览

本文档详细介绍了如何使用CSS穿透技术来修改Ant Design的上传组件样式,隐藏默认的删除图标,并展示了如何实现图片预览功能。通过调整样式,设置图片的宽高,以及利用FileReader API来处理图片预览,实现了自定义样式的图片上传列表和预览模态框。此外,还提供了数据处理方法,将base64编码转换为Ant Upload所需的格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最后效果

展示效果(样式 用样式穿透自己可调)

点击预览效果 

这里css得做个样式穿透  因为ant自带一个删除功能 

将垃圾桶图标取消显示

.img{
        /deep/.ant-upload-list-item{
        //宽高设置
          margin:0;
          padding: 0;
          width: 40px;
          height: 40px;
        }
        /deep/.ant-upload-list-picture-card-container{
        //宽高设置
          width: 40px;
          height: 40px;
          margin:0;
          padding: 0;
        }
        //ant样式穿透,将不需要显示的样式禁用
        /deep/.anticon-delete{
          display: none;
        }
      }

html结构

数据来源是item.img是因为我的代码两层v-for不用在意

<!--  显示图片处  -->
<div v-for='(items,indexs) in item.img' :key='indexs'>
    <a-upload class='img'
       list-type="picture-card"
       @preview="handlePreview"
       :file-list=items>
    </a-upload>
</div>

<!--  预览图片  -->
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
    <img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>

数据和方法

data(){
    return{
       previewVisible: false,
       previewImage: '',
    }
}


methods:{
handleCancel() {
      this.previewVisible = false;
    },
async handlePreview(file) {
     if (!file.url && !file.preview) {

        let  getBase64 = function(file) {
          console.log('测试')
          return new Promise((resolve, reject) => {
            const reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = () => resolve(reader.result);
            reader.onerror = error => reject(error);
          });
        }
        file.preview = await getBase64(file.originFileObj);

      }
      this.previewImage = file.url || file.preview;
      this.previewVisible = true;
  }

}

数据处理

下面url:items就是图片的地址 (可以是链接 也可是base64)
其他参数在本功能中暂时用不到

this.listData.forEach(item=>{
            // 如果不创建这个img数组 下面的push会检测不到img这个值 会报错
            item.img = []
            if(item.attachments){
              // 先将base64提取出来
              let base64 = item.attachments.split('],[')
              // 再将其转换为 ant能够展示的格式
              base64.forEach((items,indexs)=>{
                item.img.push([{
                  uid: indexs,
                  name: 'indexs',
                  status: 'done',
                  url: items,
                }])
              })

            }
          })

请多指教

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值