图片签名上传直连oss,权限问题
如果已经将存储空间的权限设置为公共读写,并且给使用的用户添加了对应的 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 或其他参数,也可能导致权限验证失败。请确保上传请求中不包含无法通过权限验证的参数。望采纳!
赞1
踩0