Tag: amazon s3

如何在iOS中为URLRequest签名并从S3下载文件。

让我们讨论一下在iOS移动应用程序中从AWS S3下载文件。 AWS提供了可与我们的移动应用程序一起使用的一批服务。 所有这些都可以在开发人员控制台中通过单独的Mobile Hub进行控制。 而且,它具有iOS SDK,使开发人员的生活更加轻松。 实际上有时不是,但这是另一回事了。 通常,就可以直接使用它来获得结果,并拥有Apps中最流行和最常见的解决方案。 因此,如果您想以常规方式与S3通信并下载/上传文件,我强烈建议使用iOS的官方AWS开发工具包。 但是,如果我们有一些限制,又不想将AWSS3添加到我们的项目中,而只是下载一个文件一次,或者我们需要URLRequest并随其一起下载一些东西。 在这种情况下,我们有一些选择。 最简单的方法是在存储桶中公开所需文件。 对于所有具有正确链接的人,该文件都是可见的。 但这并不安全,而且这种方法非常取决于我们的需求和内容类型。 是的,我们仍然可以拥有一个独特且丑陋的链接,因此没有人会猜到它。 但是最好使用所有可能的解决方案来确保内容安全并让我们的用户感到安全,尤其是当我们可以从AWS盒子中直接获取内容时。 让我们创建签名的请求,以从我们的S3存储桶中获取非公开图像。 AWS使用Signature V4,因此我们将使用它。 但是,根据官方文档显示,如果旧区域在2014年1月10日之前创建,则仍然可以支持Signature V2。 首先,我们需要S3。 我建议在没有移动中心方面的帮助的情况下创建它。 如果您熟悉AWS和此过程,请跳过本节。 我假设您已经有AWS开发人员帐户。 或者您可以创建一个进行测试。 AWS有免费层,足以试验各种想法,学习甚至MVP。 我们需要从服务列表中选择S3服务。 现在,我们可以创建一个新的存储桶以进行测试。 我们将其称为downloadimagetestbucket 。 目前,我们可以保留所有默认设置。 我们有存储空间,所以我们上传测试图像。 保留所有默认设置,以确保它不是公开的。 我们需要AWS凭证来生成请求签名。 我们可以使用为我们的根帐户生成的访问密钥ID和密码。 但这不是一个好主意,特别是如果您是所有者。 这样的凭据将拥有对所有内容的完全访问权限。 我们可以将它们用于快速实验,但不能用于现实生活中的Apps。 我们将仅创建具有访问我们测试桶权限的IAM用户。 与以前一样,从具有所有服务列表的AWS控制台中选择IAM。 在“用户”标签中,我们可以添加一个新用户。 一个名叫downloadimagetestuser且具有程序访问权限的神话人物。 然后是下一个…下一个…下一个并创建。 不要忘记保存ID和机密。 我们的用户没有任何权限,他在我们的AWS中无能为力。 绝对没用的人。 让我们教他一些技巧。 我们需要添加访问S3的权限。 为此,我们将从“策略”选项卡中创建单独的策略。 我们可以使用可视化编辑器,但有时使用JSON,可以更快。 但是在这种情况下,我们应该知道我们在做什么; 否则它将无法正常工作甚至无法通过验证。 我们将仅授予来自S3的读取对象。 […]

AFNewtorking从Amazon S3加载图像

我们只使用AFNetworking来加载像这样的图像: [thumbnailImage setImageWithURL:_item.thumbnailUrl]; 它工作正常。 但是现在我们已经停止了停止工作的其余项目。 这只是显示背景颜色。 所以我尝试使用这个,它加载占位符,但从来没有加载图像。 UIImage* placeholder = [UIImage imageNamed:@"placeholder"]; [thumbnailImage setImageWithURL:_item.thumbnailUrl placeholderImage:placeholder]; 我想我可能会看到什么问题,所以我试了一下: NSURLRequest* urlRequest = [NSURLRequest requestWithURL:_item.thumbnailUrl cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30]; [thumbnailImage setImageWithURLRequest:urlRequest placeholderImage:[UIImage imageNamed:@"placeholder"] success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { NSLog(@"Loaded Image"); } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { NSLog(@"Failed to load Image"); }]; 看来它没有得到它所期望的返回types。 它说Expected content type image/png, got […]

如何在iOS AWS SDK中执行客户端encryption?

是可用的么 ? 还是应该select我自己的algorithm来encryption数据并将其上传到S3存储桶? 我有要求在多平台(android / C#/ ios)中创build一个应用程序,我们必须encryption数据并将其存储到服务器端。 。 。 我已经试过这个库来encryption数据,但在iOS方面,我有不同的结果。 。 。

IOS使用后端的预先签名的URL将图像上传到S3

我正尝试从带有Rails后端服务器的IOS应用程序上传图像到Amazon S3。 这是上传stream程吗? – > IOS客户端 – >请求后端为预先签名的URL – >后端向S3请求预先签名的URL – >后端向IOS发送预先签名的URL – > IOS客户端使用预先签名的URL上传到S3 还是我错过了什么?

使用AWS CloudFront在S3上下载我的私人图像是不可能的?

我正在使用AWS SDK制作全球iOS应用程序。 并且有一个用户获取图像文件的function; 只有当请求者是图片文件的上传者的朋友。 对于此function,我使用AWS S3进行专用存储服务。 我想使用CloudFront为我的用户更快地获取下载文件。 我应该在AWS S3 SDK上设置要下载的存储桶名称,但似乎CloudFront不支持此存储桶名称。 AWS CloudFront仅适用于使用url的公共事物吗?

认知 – 禁止访问身份

我试图了解亚马逊认知,并尝试通过Facebooklogin后S3文件夹的列表内容。 脸书login工作正常。 当我点击testingbutton(cmdTestS3Tapped)它会引发以下错误。 我将amazonClientManager.h,AmazonClientManager.m和Constants.h包含在amazon提供的例子中。 常数以belllow给出。 有谁能帮我解决这个问题吗? #define AWSAccountID @"MyAccountID" #define CognitoPoolID @"us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx" #define CognitoRoleAuth @"arn:aws:iam::MyAccountID:role/Cognito_iOSTestPoolAuth_DefaultRole" #define CognitoRoleUnauth @"arn:aws:iam::MyAccountID:role/Cognito_iOSTestPoolAuth_DefaultRole" 这是angular色 – Cognito_iOSTestPoolAuth_DefaultRole { "Version": "2012-10-17", "Statement": [{ "Action": [ "mobileanalytics:PutEvents", "cognito-sync:*" ], "Effect": "Allow", "Resource": [ "*" ], "Effect": "Allow", "Action": "s3:*", "Resource": "*" }] } 这是信任关系 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": […]

超时使用签名的URL从iOS发布到S3

我的服务器正在生成一个签名上传到S3的信息。 当我将这些信息传递给iOS时,它适用于小文件。 有时它也适用于更大的,但它往往超时。 我目前正在通过WIFI在iOS 7上进行testing。 在大约35 MB的文件上,大约60%的文件会超时,但是有时会完成,有时甚至超时。 我的服务器生成以下信息,我作为表单部件传递给我的POST。 (我也试过它作为具有类似结果的参数): AWSAccessKeyId 内容types acl(设为私有) 桶 键 政策 签名 success_action_redirect 以及一个URL。 这是我的代码,生成上传: AFHTTPRequestOperation *op = [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { if( throttle ) [formData throttleBandwidthWithPacketSize:kAFUploadStream3GSuggestedPacketSize delay:kAFUploadStream3GSuggestedDelay]; for( id key in parameters ) { NSString *val = parameters[key]; [formData appendPartWithFormData:[val dataUsingEncoding:NSUTF8StringEncoding] name:key]; } NSError *error; if( ![formData appendPartWithFileURL:videoUrl […]

如何获取文件Amazon S3,AWS IOS SDK的上传date

我有一个S3存储桶中的文件。 我可以成功下载并在我的应用程序上显示该文件。 但是我想知道,如果文件是最新的或没有。 使用Firefox S3扩展,我可以看到在存储桶文件名中,文件大小和上传时间保存到S3。 上传时间的一个例子是10/10/2012 11:35 PM 获取我使用的url dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ // Set the content type so that the browser will treat the URL as an image. S3ResponseHeaderOverrides *override = [[S3ResponseHeaderOverrides alloc] init]; override.contentType = @" "; // Request a pre-signed URL to picture that has been uplaoded. S3GetPreSignedURLRequest *gpsur […]

当应用程序从后台移除或重启设备时,使用NSURLSession恢复任务

我已经检查了很多文档,但是在应用程序从后台删除或重启设备时找不到使用NSURLSession恢复任务的解决scheme。 我正在处理亚马逊S3上传一些文件,在这我能够 当应用程序处于前景以及后台时,使用NSURLSessionUploadTask将file upload到S3。 当上传时由于任何其他原因应用程序崩溃 ,并且如果应用程序未从后台移除,则继续任务 。 重新启动任务,如果我重新启动设备,而上传,如果应用程序不会从后台删除。 这里是我的代码,以appdelegate的applicationDidBecomeActive方法编写的恢复function。 // Initialize session config and the background session NSURLSession *l_taskSession = [self backgroundSession]; [l_taskSession getTasksWithCompletionHandler:^(NSArray *dataTasks, NSArray *uploadTasks, NSArray *downloadTasks) { if([uploadTasks count]) { for (int i=0; i<[uploadTasks count]; i++) { NSURLSessionUploadTask *uploadRequestTask = (NSURLSessionUploadTask*)[uploadTasks objectAtIndex:i]; [uploadRequestTask resume]; NSLog(@"——– Upload Resumed ——- "); } } else […]

Cognito / IAM策略和S3获取对象

我正在尝试将S3和Cognito集成到我的iOS应用程序中,到目前为止还没有成功。 我相信错误是连接到我的身份validation和Unauth用户的IAM策略。 所以这是我的政策: { "Version": "2012-10-17", "Statement": [{ "Effect":"Allow", "Action":"cognito-sync:*", "Resource":["arn:aws:cognito-sync:us-east-1:XXXXXXXXXXXX:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"] }, { "Effect":"Allow", "Action": "s3:*", "Resource": ["arn:aws:s3:::my_bucket", "arn:aws:s3:::my_bucket/*"] } ] } 这里是我打电话给S3的地方: AWSS3GetObjectRequest *getObjectRequest = [[AWSS3GetObjectRequest alloc] init]; getObjectRequest.key = KEY; getObjectRequest.bucket = BUCKET; //default service has been configured previously AWSS3 *s3 = [[AWSS3 new] initWithConfiguration:[AWSServiceManager defaultServiceManager].defaultServiceConfiguration]; [[s3 getObject:getObjectRequest] continueWithBlock:^id(BFTask *task) { if(task.error) { […]