Iphone 如何将文件上传到AmazonS3并获取链接?
我正在尝试将一个图像上传到AmazonS3,并获取该文件的链接(使用ASIHTTPRequest for AmazonS3)。目前,我已经完成了以下工作(我的问题实际上是代码):Iphone 如何将文件上传到AmazonS3并获取链接?,iphone,objective-c,Iphone,Objective C,我正在尝试将一个图像上传到AmazonS3,并获取该文件的链接(使用ASIHTTPRequest for AmazonS3)。目前,我已经完成了以下工作(我的问题实际上是代码): 要按顺序回答您的问题: 您声明的key变量是文件在S3中的名称。文件是通过它们在bucket中的键来标识的,键必须是唯一的——把它们想象成类似于文件名的,但是你只能得到一个级别的文件夹(bucket) 一旦请求完成(启动同步方法返回),看起来您可以访问请求的responseData或responseString属性来获
要按顺序回答您的问题:
key
变量是文件在S3中的名称。文件是通过它们在bucket中的键来标识的,键必须是唯一的——把它们想象成类似于文件名的,但是你只能得到一个级别的文件夹(bucket)responseData
或responseString
属性来获取S3提供的任何返回数据好吧,我自己设法做到了:) 首先,您应该设置一个访问策略,这是PUT请求的属性 requestForPUTSmth.accessPolicy=ASIS3AccessPolicyPublicReadWrite 文件链接的组成方式如下: NSString*linkString=[NSString stringWithFormat:@“http://%@.s3.amazonaws.com/%@”,bucket,key]
其中bucket-是S3上的文件夹名,Key是文件名。就是这样。我应该为每个文件创建一个bucket,还是可以为多个文件使用一个bucket?您可以(也应该)为多个文件使用一个bucket,但每个文件都需要在该bucket中有自己的唯一密钥。好的,明白了。请告诉我,除了SharedSecretAccessKey和SharedAccessKey之外,我还需要提供其他信息吗。我正在尝试获取存储桶列表,但得到一个错误ASIS3ServiceRequest*requestOfBuckets=[ASIS3ServiceRequest serviceRequest];[行李启动同步];如果(![request error]){NSArray*Bucket=[RequestOfBucket];//一个ASIS3Bucket对象数组NSLog(@“Bucket:%@”,Bucket);}我已经修复了该错误,但仍然无法组成链接。你能告诉我为什么我不能记录回复吗?它进展顺利,当然存在,但我不能在Debugger中查看它的内容。我会试着发一张截图哦,我讨厌没有评论的否决票(如果你这么聪明,为什么不回答这个问题??
- (void) uploadAnImageToS3 {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[ASIS3Request setSharedSecretAccessKey:@"*****here I put my secretkey*****"];
[ASIS3Request setSharedAccessKey:@"*****here I put my key*****"];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(self.imageToPost)];
NSString * key = @"aKey"
ASIS3ObjectRequest *request = [ASIS3ObjectRequest PUTRequestForData:imageData withBucket:@"theBucketName" key:key];
[request setShouldCompressRequestBody:YES];
[request startSynchronous];
if (![request error]) {
//Here I should share a link for the put file, how do I get it? Is there any response from s3?
}
else {
NSLog(@"%@",[[request error] localizedDescription]);
}
[self performSelectorOnMainThread:@selector(stopActivity) withObject:self waitUntilDone:YES];
[pool release];
}