前端上传文件到金山云存储

之前公司文件都是用的腾讯云或阿里云的对象存储,现在有个项目甲方要使用金山云存储。在网上找了一下,暂时没有踩坑文章,现记录总结一下。

目前在项目中使用POST Object的方式上传,相关文档参考:对象存储(KS3)POST Object-金山云

获取签名

import request from '@/utils/request'

export default class CommonServer{
  // 获取金山云上传签名
  static getKsOssSign () {
    return request({
      url: '/common/ks_oss_sign/',
      method: 'post'
    })
  }
}

封装方法

import axios from 'axios'
import moment from 'moment'

export const OSS_URL = 'https://ks3-cn-beijing.ksyun.com/xxxx' // 金山云上传域名

// 文件扩展名提取
export const fileType = fileName => fileName.substring(fileName.lastIndexOf('.') + 1)

/**
 * oss路径定义
 * @param file
 */
export const ossPath = file => {
  const folder = moment().format('YYYY-MM-DD')
  if (file.name) {
    return `admin/upload/${folder}/${fileType(file.name)}/${file.name}`
  }
}

/**
 * 金山云上传
 * @returns {Promise<unknown>}
 */
export const ksOssUpload=file=>{
  return new Promise((resolve, reject) => {
    CommonServer.getKsOssSign().then(res => {
      const { accessid, policy, signature } = res
      const formData = new FormData()
      const key = ossPath(file)
      formData.append('acl', 'public-read')
      formData.append('key', key)
      formData.append('signature', signature)
      formData.append('KSSAccessKeyId', accessid)
      formData.append('policy', policy)
      formData.append('file', file)
      axios.post(OSS_URL, formData).then(res => {
        const { status } = res
        if (status === 200) {
          const data = {
            url: `${OSS_URL}/${key}`,
            type: fileType(file.name)
          }
          resolve(data)
        } else {
          reject(res)
        }
      }).catch(err => {
        reject(err)
      })
    }).catch(err => {})
  })
}

使用

const res =await ksOssUplad(file)

运行结果

获取签名

在这里插入图片描述
在这里插入图片描述

上传文件

在这里插入图片描述

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小黑ii

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

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

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

打赏作者

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

抵扣说明:

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

余额充值