开发者社区 问答 正文

iOS上传图片

直接粘代码
OSSClient *client;

        NSString *endpoint = [NSString stringWithFormat:@"http://%@",token.host_name];
        //注意在控制台获取域名之后,要在前面加上http://,并去掉bucketName字段。例如从控制台获取域名为“<bucketName>.oss-cn-beijing.aliyuncs.com”,则hostId应为“http://oss-cn-beijing.aliyuncs.com
        id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:token.key_id secretKey:token.key_secret];
        
        client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];
        //初始化client
        
        OSSPutObjectRequest * put = [OSSPutObjectRequest new];
        
        // 必填字段
        put.bucketName = token.host_name;
        put.objectKey = @"packagePass";
        UIImage *image = [UIImage imageNamed:@"packagePass"];
        
        
        //    put.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
        put.uploadingData =  UIImagePNGRepresentation(image); // 直接上传NSData

        OSSTask * putTask = [client putObject:put];
        
        [putTask continueWithBlock:^id(OSSTask *task) {
            if (!task.error) {
                NSLog(@"upload object success!");
            } else {
                NSLog(@"upload object failed, error: %@" , task.error);
            }
            return nil;
        }];

就简单的上传但报如下错误

报错
upload object failed, error: Error Domain=com.aliyun.oss.serverError Code=-403 "(null)" UserInfo={__name=Error, HostId=vitabeedev.oss-cn-hangzhou.aliyuncs.com, Message=The OSS Access Key Id you provided does not exist in our records., OSSAccessKeyId=STS.sMk9KLTRyRhV7qsQ6hkn, Code=InvalidAccessKeyId, RequestId=56EA1CE305200A833146CABF}

展开
收起
vitabeetommy 2016-03-17 11:16:42 5927 分享 版权
阿里云 AI 助理回答

根据您提供的错误信息,问题出在Access Key ID无效。错误提示为"The OSS Access Key Id you provided does not exist in our records.",这意味着您使用的STS(Security Token Service)生成的临时凭证中的Access Key ID未被OSS服务识别。

请检查以下几个方面来解决这个问题:

  1. STS Token有效性:确保您使用的STS Token是有效的,并且尚未过期。STS Token具有时效性,请确认生成Token的时间以及Token的有效期设置。

  2. STS权限配置:检查用于生成STS Token的RAM用户或角色是否拥有足够的权限来访问指定的Bucket。需要确保该用户或角色至少有oss:PutObject权限针对目标Bucket。

  3. Access Key ID格式:虽然错误提示不涉及格式问题,但请再次确认在代码中使用的Access Key ID(在这个场景下是通过STS获取的临时密钥)没有格式上的错误,比如前后是否有空格等。

  4. Endpoint一致性:确保您的Endpoint与Bucket所在的区域相匹配。错误信息显示的是vitabeedev.oss-cn-hangzhou.aliyuncs.com,这表明Bucket位于杭州区域。请确认您的Endpoint设置正确无误,即应指向杭州区域的OSS服务。

  5. STS服务访问:确认应用程序或环境能够正常访问阿里云STS服务。网络配置、DNS解析等问题也可能导致无法验证STS Token。

如果以上步骤都确认无误,但问题依旧存在,建议直接在阿里云控制台使用相同的STS Token尝试上传文件,以进一步定位问题是否出在客户端代码还是STS Token本身。同时,也可以考虑查看STS Token生成时的日志,看是否有更多线索。如果问题依然无法解决,可能需要联系阿里云技术支持获取帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答标签:
问答地址: