Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何将文件上传到AmazonS3并获取链接?_Iphone_Objective C - Fatal编程技术网

Iphone 如何将文件上传到AmazonS3并获取链接?

Iphone 如何将文件上传到AmazonS3并获取链接?,iphone,objective-c,Iphone,Objective C,我正在尝试将一个图像上传到AmazonS3,并获取该文件的链接(使用ASIHTTPRequest for AmazonS3)。目前,我已经完成了以下工作(我的问题实际上是代码): 要按顺序回答您的问题: 您声明的key变量是文件在S3中的名称。文件是通过它们在bucket中的键来标识的,键必须是唯一的——把它们想象成类似于文件名的,但是你只能得到一个级别的文件夹(bucket) 一旦请求完成(启动同步方法返回),看起来您可以访问请求的responseData或responseString属性来获

我正在尝试将一个图像上传到AmazonS3,并获取该文件的链接(使用ASIHTTPRequest for AmazonS3)。目前,我已经完成了以下工作(我的问题实际上是代码):


要按顺序回答您的问题:

  • 您声明的
    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];
    }