开发者社区 > 云存储 > 对象存储OSS > 正文

图片签名上传直连oss,权限问题

Snipaste_2023-02-20_15-28-26.png 报错403,查阅过资料说是权限问题,但是我把存储空间改为公共读写,还给使用的用户添加对应的oss权限还是报的一样错误,求帮帮 Snipaste_2023-02-20_15-29-06.png 自定义策略我也用过,不过感觉第一条策略已经包含了对bucket的管理,不知道问题出在哪里..

展开
收起
游客2p4cjqfehvuau 2023-02-20 15:35:09 1095 6
5 条回答
写回答
取消 提交回答
  • 说明访问OSS的用户没有当前操作的权限。请确认使用AccessKeyID/AccessKeySecret是正确,可以参考阿里云文档

    2023-02-23 08:02:46
    赞同 展开评论 打赏
  • #十分感谢各位的回答提供的思路,目前问题是解决了,是策略问题,我在后端签发策略Policy的时候规定前端直连oss的key需要一定的格式,而我前端上传的时候没有按照这个格式进行调整,导致上诉报错。 #会403报错的问题有很多,建议还是慢慢测试接口、测试权限一步步来,我就是步子太大扯着蛋。 #最后谢谢各位的帮忙!

    2023-02-21 14:42:58
    赞同 2 展开评论 打赏
  • 如果已经将存储空间的权限设置为公共读写,并且给使用的用户添加了对应的 OSS 权限,但仍然无法上传图片,那么可能是在生成签名时未正确设置权限。在生成签名时,需要设置 policy 字段来指定上传文件的权限。如果没有正确设置 policy 字段,OSS 将无法验证上传请求的权限,从而返回 403 错误。参考下我之前写的代码:const accessKeyId = 'your-accessKeyId';const accessKeySecret = 'your-accessKeySecret';const bucket = 'your-bucket';const expiration = new Date().getTime() + 3600 * 1000; // 1 hourconst policy = {  expiration,  conditions: [    ['content-length-range', 0, 104857600], // 0B-100MB    { bucket },    ['starts-with', '$key', ''], // 允许上传任意文件名    { acl: 'public-read' }, // 允许公共读  ],};const policyBase64 = Buffer.from(JSON.stringify(policy)).toString('base64');const signature = crypto.createHmac('sha1', accessKeySecret).update(policyBase64).digest('base64');const formData = {  OSSAccessKeyId: accessKeyId,  policy: policyBase64,  signature,};其中,acl: 'public-read' 表示允许公共读。请注意,在设置公共读权限时,需要确保存储空间的权限设置也允许公共读,否则仍然会返回 403 错误。另外,如果上传请求中带有自定义 header 或其他参数,也可能导致权限验证失败。请确保上传请求中不包含无法通过权限验证的参数。望采纳!

    2023-02-21 10:18:37
    赞同 1 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    如果已经将存储空间的权限设置为公共读写,并且给使用的用户添加了对应的 OSS 权限,但仍然无法上传图片,那么可能是在生成签名时未正确设置权限

    在生成签名时,需要设置 policy 字段来指定上传文件的权限。如果没有正确设置 policy 字段,OSS 将无法验证上传请求的权限,从而返回 403 错误。

    参考下我之前写的代码:

    const accessKeyId = 'your-accessKeyId';
    const accessKeySecret = 'your-accessKeySecret';
    const bucket = 'your-bucket';
    const expiration = new Date().getTime() + 3600 * 1000; // 1 hour
    const policy = {
      expiration,
      conditions: [
        ['content-length-range', 0, 104857600], // 0B-100MB
        { bucket },
        ['starts-with', '$key', ''], // 允许上传任意文件名
        { acl: 'public-read' }, // 允许公共读
      ],
    };
    const policyBase64 = Buffer.from(JSON.stringify(policy)).toString('base64');
    const signature = crypto.createHmac('sha1', accessKeySecret).update(policyBase64).digest('base64');
    const formData = {
      OSSAccessKeyId: accessKeyId,
      policy: policyBase64,
      signature,
    };
    

    其中,acl: 'public-read' 表示允许公共读。请注意,在设置公共读权限时,需要确保存储空间的权限设置也允许公共读,否则仍然会返回 403 错误。

    另外,如果上传请求中带有自定义 header 或其他参数,也可能导致权限验证失败。请确保上传请求中不包含无法通过权限验证的参数。

    望采纳!

    2023-02-20 17:48:02
    赞同 2 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    说明访问OSS的用户没有当前操作的权限。请确认使用AccessKeyID/AccessKeySecret是正确,可以参考阿里云文档

    2023-02-20 16:34:37
    赞同 1 展开评论 打赏

相关产品

  • 对象存储
  • 热门讨论

    热门文章

    相关电子书

    更多
    OSS运维进阶实战手册 立即下载
    《OSS运维基础实战手册》 立即下载
    OSS运维基础实战手册 立即下载