vue3 TS vite element ali-oss使用方式

发布时间 2023-07-29 11:13:22作者: 金色秋风

vue3 TS vite element ali-oss使用方式

  1. 安装ali-oss包

    npm i ali-oss -S
    
  2. 使用oss封装函数

    const OSS = require('ali-oss')
    // import Oss from 'ali-oss'
    
    /**
     *  [accessKeyId] {String}:通过阿里云控制台创建的AccessKey。
     *  [accessKeySecret] {String}:通过阿里云控制台创建的AccessSecret。
     *  [bucket] {String}:通过控制台或PutBucket创建的bucket。
     *  [region] {String}:bucket所在的区域, 默认oss-cn-hangzhou。
     */
    
    //Client.js
    
    export default function Client(data) {
      //后端提供数据
      return new OSS({
        region: 'oss-cn-beijing', //oss-cn-beijing-internal.aliyuncs.com
        accessKeyId: data.accessKeyId,
        accessKeySecret: data.accessKeySecret,
        stsToken: data.securityToken,
        bucket: data.bucket
      })
    }
    
    这里注意

    vite 默认不支持commonjs语法,所以使用require会报错。解决方案

    1. 安装vite-plugin-require-transform

      npm i vite-plugin-require-transform --save-dev
      
    2. 配置vite.config.js

       plugins: [
       			requireTransform({
              fileRegex: /.ts$|.tsx$|.vue$|.js$/
            })
       ]
      
    再次注意

    因为阿里OSS文档的后台示例

    package main
    
    import (
        "fmt"
        "github.com/aliyun/aliyun-oss-go-sdk/oss"
        "os"
    )
    
    func main() {    
        // 从STS服务获取的安全令牌(SecurityToken)。
        securitytoken := "yourSecurityToken" //上面获取的临时授权的数据里的Credentials.SecurityToken
        // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。
        // 从STS服务获取临时访问凭证后,您可以通过临时访问密钥和安全令牌生成OSSClient。
        // 创建OSSClient实例。
        // 第一个参数就是bucket的Endpoint,可以在对象储存oss控制台的bucket的概览得到,例如http://oss-cn-beijing.aliyuncs.com
        // 第二个参数就是上面获取的临时授权的数据里的Credentials.AccessKeyId
        // 第三个参数就是上面获取的临时授权的数据里的Credentials.AccessKeySecret
        client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret", oss.SecurityToken(securitytoken))
        if err != nil {
            fmt.Println("Error:", err)
        	os.Exit(-1)    
        }
        // 填写Bucket名称,例如examplebucket。
        bucketName := "examplebucket"
        // 填写Object的完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        objectName := "exampledir/exampleobject.txt"
        // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
        filepath := "D:\\localpath\\examplefile.txt"
        bucket,err := client.Bucket(bucketName)
        // 通过STS授权第三方上传文件。
        err = bucket.PutObjectFromFile(objectName,filepath)
        fmt.Println(err)
    }
    
    

    所以后台返回token的名字是securitytoken,而ali-OSS的示例名叫stsToken,记住自己对应上,安装我的示例写

  3. element-plus代码

    <template>
    <el-upload
        accept=""
        v-model:file-list="fileList"
        :http-request="handleUpload"
        :before-upload="beforeUpload"
        action=""
        list-type="picture-card"
        :auto-upload="true"
      >
        <slot name="default" class="el-icon-plus" />
      </el-upload>
      </<template>
    <script lang="ts" setup>
    //Client.js 这里引入刚才封装好的Client函数
    import Client from './ali-oss.js'
    import { ref } from 'vue'
    import type { UploadUserFile } from 'element-plus'
    const fileList = ref<UploadUserFile[]>([])
    const handleUpload = async (option: Object) => {
      console.log(option)
    }
    // 这里是接口,会返回 
    import { OssAuthorize } from '@/utils/publicData'
    function beforeUpload(file: any) {
      console.log(file)
      OssAuthorize().then((response) => {
        // response.data.accessKeyId = response.data.accessKeyId.replace('STS.', '')
        const client = Client(response.data)
        client.multipartUpload(file.name, file).then((res: any) => {
          console.log(res)
        })
      })
    }
    </script>
    

    上传成功后会返回的数据里requestUrls

    这个是个数组 里面放的是图片链接