小程序上传图片到阿里oss之后报403?

发布于 2022-09-13 00:27:15 字数 1870 浏览 49 评论 0

image.png
OSSAccessKeyId和accessKeySecret从服务器获取。
signature和policy是前端生成的,
这是请求参数
image.png
这是代码

handleUpload = async (files:any) => {
    Taro.showToast({title: '上传中'})
    let { dir, ossToken } = this.state

    const policyBase64 = this.getPolicyBase64()
    const signature = this.getSignature(policyBase64)
    
    console.log('ossToken', ossToken)
    let newArr = files.map((item:any) => {
      let formData = {
        key: dir + item.substring(item.lastIndexOf('/')+1),
        policy: policyBase64,
        OSSAccessKeyId: (ossToken as any).accessKeyId,
        signature,
        success_action_status: '200'
      }
      console.log('formData', formData)
      return Taro.uploadFile({
        url: (ossToken as any).filePath,
        filePath: item,
        header: {
          "Content-Type": "multipart/form-data"
        },
        name: 'file',
        formData
      })
    })

    let resArr = await Promise.all(newArr)
    Taro.hideLoading()
    console.log(resArr)
  }

  getPolicyBase64 = ():string => {
    let date = new Date();
    date.setHours(date.getHours() + 700 * 1000);
    let srcT = date.toISOString();
    const policyText = {
        "expiration": srcT, //设置该Policy的失效时间,超过这个失效时间之后,就没有办法通过这个policy上传文件了 
        "conditions": [
            ["content-length-range", 0, 5*1024 * 1024] // 设置上传文件的大小限制,5mb
        ]
    };

    const policyBase64 = Base64.encode(JSON.stringify(policyText));
    return policyBase64
}

getSignature = (policyBase64:string) => {
  let { ossToken } = this.state
  const accesskey = (ossToken as any).accessKeySecret
  const signature = Crypto.enc.Base64.stringify(Crypto.HmacSHA1(accesskey, policyBase64))
  console.log(signature)

  return signature
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文