2022年10月9日

vue3+vant3上传图片至oss-图片展示

作者 admin

前段时间搞了一下这块,把学习内容写出来 记录避免自己忘记

首先看下vant官网上传组件的 地址: https://vant-contrib.gitee.io/vant/#/zh-CN/uploader

参考组件库的代码 尝试后发现能拿到上传图片的返回 信息,

其中包含了 图片名字,图片名称,图片队列内容相关。

这块还需要改动一下 ,没法直接拿来用 ,直接看下代码:

index.vue

<van-uploader v-model="fileImg" :after-read="afterRead" v-if="uploadState" :preview-image="false"
   accept="image/*" :max-size="10 * 1024 * 1024" class="upload-opacity">
     <img :src="uploadBtn" class="upload-icon" />
</van-uploader>

 data() {
    return {
      fileImg: [],
      uploadState: false,
    }
  },

method:{
async afterRead(file) {
      const { type, name, size } = file?.file;
      const par = {
        file_source: "xcx-task",
        file_name: name,
        file_memo: name,
        file_type: type,
        file_size: size,
        relation_id: this.patiendValue,
        file: file.file,
      };
      const { fileUrl } = await useUpload(par); // 拿到文件的信息
      let imgUrl = fileUrl.value;
      // console.log("fileUrl", imgUrl);
      this.pageNum = 1;
      this.listOnLoad()
    },
}

useUpload.ts

import {ref} from 'vue'
import {uploadApi} from '@/service/common'
import { Toast } from 'vant';

export default async function useUpload(data:any) {
  
  const fileUrl = ref('')
  const videoImage = ref('')
  let res
  try{
     res = await uploadApi(data) //请求阿里云接口返回的对象参数 ,包含url,图片,视频,名称,时间,等等。
  }catch (e){
    Toast('网络异常,请重新上传')
  }
 
  
  if(!res){
    return {fileUrl:'', videoImage:''}
  }
  fileUrl.value = res?.sign_url
  videoImage.value = res?.video_image || ''
  return {fileUrl, videoImage}
}