input上传文件-vue3 -ts使用formData上传和base64上传

tempent

<AFormItem label="白色图标" name="iconWhiteUrl">
            <div class="inputBox">
              <span>上传文件
                <input
                  id="iconWhiteInp"
                  accept="image/png"
                  class="img-input"
                  type="file"
                  @change="(file)=>handleChangeIconWhiteUrl(file)"
                />
              </span>
            </div>
          <p>{{ value.iconWhiteUrl }}</p>
 </AFormItem>

ts

 import { defineComponent, reactive,ref ,nextTick} from 'vue'
 import {uploadImg} from "./addOrChange"

 const handleChangeIconWhiteUrl = async(e:any)=>{
        iconWhiteUrlList.value =[] // 自己展示的返回图片地址
        uploadImg(e,'white') //调用上传方法
        const iconWhiteInp = document.getElementById('iconWhiteInp') as HTMLInputElement | null;  //获取元素清空value
        if(iconWhiteInp){ 
          iconWhiteInp.value = ''
        }
      }

//addOrChange文件封装引入,这里是传formData的
import { reactive } from 'vue';
import { message } from 'ant-design-vue'
import api from '@/api/api'
export const addOrChangeForm = reactive({
    iconWhiteUrl:"",
})
// 上传图片传formdata对象方法
export const uploadImg = async(e:any,type:string)=>{
        const fileFormData = e.target.files[0]
        if (!uploadImgRules.type.includes(fileFormData.type)) {
          message.destroy()
          message.error('图片格式不符合要求,请重新上传png格式图片')
          return 
        }
        if (fileFormData.size  > uploadImgRules.size) {
          message.destroy()
          message.error(`图片上传超过30kb,请重新上传`)
          return 
        }
        let formData  = new FormData() //传formdata对象方法
        formData.append('file',fileFormData);
        const data = await api.hotWordIcon.uploadImgIcon(formData)
        if(data?.retcode ==0){
          if(type=='white'){
            addOrChangeForm.iconWhiteUrl = data.data
          }
          if(type=='black'){
            addOrChangeForm.iconBlackUrl = data.data
          }
        }
    
}

// 上传图片 传base64位文件流方法
export const uploadImg = async(e:any,type:string)=>{
        const fileFormData = e.target.files[0]
        
        const resultFile = e.target.files; // input 获取的文件列表
        const aBlob = new Blob([resultFile[0]],{type:'image/png'}) // 指定转换成blob的类型
        const reader = new FileReader(); // 3 新建 FileReader 对象,用于操作文件
        reader.readAsDataURL(aBlob) // 4 将文件转换成指定类型的数据
        reader.onload= async(ev:any)=>{
        const base64Url = ev.target.result; // 5 base64内容
            if (!uploadImgRules.type.includes(fileFormData.type)) {
             message.destroy()
             message.error('图片格式不符合要求,请重新上传png格式图片')
             return 
           }
           if (fileFormData.size  > uploadImgRules.size) {
             message.destroy()
             message.error(`图片上传超过30kb,请重新上传`)
             return 
           }
           const data = await api.hotWordIcon.uploadImgIcon(base64Url)
           if(data?.retcode ==0){
             if(type=='white'){
               addOrChangeForm.iconWhiteUrl = data.data
             }
             if(type=='black'){
               addOrChangeForm.iconBlackUrl = data.data
             }
           }
         }
    
}

css

    .inputBox{
      margin-top: 5px;
      span{
        padding: 6px 18px;
        background-color: #456fff;
        color: #fff;
        line-height: 10px;
        position: relative;
      }
      input{
        width: 90px;
        height: 35px;
        position: absolute;
        top: 0px;
        left: 0px;
        border: 1px solid red;
        opacity: 0;
      }
    }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值