对象相关接口 返回结果 HeadObjectOutput返回的属性如下: 参数 类型 说明 ContentLength int64 本次请求返回对象数据的大小(单位:字节)。 ContentType string 对象文件格式的标准MIME类型 ETag string 对象的Entity Ttag LastModified time.Time 最近一次修改对象的时间。 VersionId string 对象最新的版本ID。 StorageClass string 对象的存储类型。 设置对象ACL 功能说明 设置对象ACL操作可以为对象存储服务中的对象设置访问权限,设置对象ACL操作需要具有对象的WRITEACP权限,执行操作的时候,要么使用封装好的ACL数据类型传入ACL信息,要么以字符串的形式详细描述ACL信息。 对象的访问权限说明: 权限类型 说明 READ 可以读取对象的数据和元数据信息。 READACP 可以读取对象的ACL信息。对象的拥有者默认具有对象的READACP权限。 WRITE 可以修改原有对象数据和删除对象。 WRITEACP 可以修改对象的ACL信息,授予该权限相当于授予FULLCONTROL权限,因为具有WRITEACP权限的用户可以配置对象的任意权限。对象的拥有者默认具有WRITEACP权限。 FULLCONTROL 同时授予READ、READACP、WRITE和WRITEACP。 代码示例 plaintext func PutObjectAcl(svc s3.S3) { bucket : " " key : " " permission : "READ" // FULLCONTROL、WRITE、WRITEACP、READ、READACP granteeDisplayName : " " granteeId : " " userType : "CanonicalUser" // 获取当前acl getObjectAclOutput, err : svc.GetObjectAcl(&s3.GetObjectAclInput{ Bucket: aws.String(bucket), Key: aws.String(key), }) if err ! nil { fmt.Printf("fail to get acl of object %v, %vn", key, err) os.Exit(1) } // 创建一个新的授权信息 var newGrantee s3.Grantee{ Type: aws.String(userType), DisplayName: aws.String(granteeDisplayName), ID: aws.String(granteeId), } var newGrant s3.Grant{Grantee: &newGrantee, Permission: &permission} grants : getObjectAclOutput.Grants owner : getObjectAclOutput.Owner.DisplayName ownerId : getObjectAclOutput.Owner.ID grants append(grants, &newGrant) // 设置对象的ACL putObjectAclInput : &s3.PutObjectAclInput{ AccessControlPolicy: &s3.AccessControlPolicy{ Grants: grants, Owner: &s3.Owner{ DisplayName: &owner, ID: &ownerId, }, }, Bucket: aws.String(bucket), Key: aws.String(key), } putObjectAclOutput, err : svc.PutObjectAcl(putObjectAclInput) if err ! nil { fmt.Printf("fail to put objec acl. %vn", err) return } fmt.Println(putObjectAclOutput) } 通过PutObjectAclRequest操作: PutObjectAclRequest操作首先生成一个"request.Request"对象,该对象是一个执行PutObjectAcl操作的请求。通过调用Request对象的Send方法来设置对象的ACL信息。该方法可以生成定制化的请求,例如自定义请求头部请求超时重试设置。 plaintext func PutObjectAclRequest(svc s3.S3) { bucket : " " key : " " permission : "READACP" // FULLCONTROL、WRITE、WRITEACP、READ、READACP granteeDisplayName : " " granteeId : " " userType : "CanonicalUser" // 获取当前acl currentACL, err : svc.GetObjectAcl(&s3.GetObjectAclInput{ Bucket: aws.String(bucket), Key: aws.String(key), }) if err ! nil { fmt.Printf("fail to get acl of object %v, %vn", key, err) os.Exit(1) } // 创建一个新的授权信息 var newGrantee s3.Grantee{ Type: aws.String(userType), DisplayName: aws.String(granteeDisplayName), ID: aws.String(granteeId), } var newGrant s3.Grant{Grantee: &newGrantee, Permission: &permission} grants : currentACL.Grants owner : currentACL.Owner.DisplayName ownerId : currentACL.Owner.ID grants append(grants, &newGrant) // 设置对象的ACL putObjectAclInput : &s3.PutObjectAclInput{ AccessControlPolicy: &s3.AccessControlPolicy{ Grants: grants, Owner: &s3.Owner{ DisplayName: &owner, ID: &ownerId, }, }, Bucket: aws.String(bucket), Key: aws.String(key), } req, putObjectAclOutput : svc.PutObjectAclRequest(putObjectAclInput) err req.Send() if err ! nil { fmt.Printf("fail to put object ACL. %vn", err) } else { fmt.Println(putObjectAclOutput) } }