由于看起来我们只限于桶数,我试图找出如何完成以下操作:

>我有一个iOS应用,用户可以上传一个个人资料图片.
>个人资料可以被任何人查看(我想要公开).
>理想情况下,我可以上传到一个桶(例如:myprofilepics.s3.amazonaws.com)
>理想情况下,每个用户都可以上传到自己的子文件夹(例如:myprofilepics.s3.amazonaws.com/images/userXXX/
>理想情况下,我上传图像,并将其设置为直接从应用程序访问公共访问,以便其他用户可以立即查看个人资料图片.

我在文档中缺少某些东西吗?我感谢任何关于这个问题的反馈.

解决方法

为了解决这个问题,我在Amazon SDK的iOS SDK中开始了一个示例代码,发现了 here.在SDK zip中,可以在样例/ S3_Uploader找到感兴趣的示例项目.

要从该示例项目到上传的图像公开的项目,您只需在正确的位置添加一行:

por.cannedACL   = [S3CannedACL publicRead];

其中por是用于上传图像的S3PutObjectRequest.

我的项目的上传代码看起来像这样(看起来几乎与Amazon的示例代码相同):

Nsstring *uuid = @""; // Generate a UUID however you like,or use something else to name your image.
UIImage *image; // This is the UIImage you'd like to upload.

// This URL is not used in the example,but it points to the file
// to be uploaded.
Nsstring *url = [Nsstring pathWithComponents:@[ @"https://s3.amazonaws.com/",AWS_PICTURE_BUCKET,uuid ]];

// Convert the image to JPEG data. Use UIImagePNGRepresentation for pngs
NSData *imageData = UIImageJPEGRepresentation(image,1.0);

// Create the S3 Client.
AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:AWS_ACCESS_KEY_ID withSecretKey:AWS_SECRET_KEY];

@try {
    // Create the picture bucket.
    [s3 createBucket:[[S3CreateBucketRequest alloc] initWithName:AWS_PICTURE_BUCKET]];

    // Upload image data.  Remember to set the content type.
    S3PutObjectRequest *por = [[S3PutObjectRequest alloc] initWithKey:uuid inBucket:AWS_PICTURE_BUCKET];
    por.contentType = @"image/jpeg"; // use "image/png" here if you are uploading a png
    por.cannedACL   = [S3CannedACL publicRead];
    por.data        = imageData;
    por.delegate    = self; // Don't need this line if you don't care about hearing a response.

    // Put the image data into the specified s3 bucket and object.
    [s3 putObject:por];
}
@catch (AmazonClientException *exception) {
    NSLog(@"exception");
}

当然,AWS_ACCESS_KEY_ID和AWS_SECRET_KEY是您的AWS凭据,AWS_PICTURE_BUCKET是您的图片桶.

如何使用AWS iOS SDK从设备上传图像并设置为公开的更多相关文章

  1. 将AWS DynamoDB表中的数据加载到iOS上的UITableView

    我的iOS应用程序中使用Swift编写的一个屏幕是UITableView.在这个UITableView中,我想从AWSDynamoDB表中加载名为Books的数据.目前,这是我在故事板上的原型单元格:在表格中我有3个属性:“名称”,“价格”和“ISBN”.我想要的是扫描“书籍”表,并过滤结果,因此结果的“ISBN”属性将包含数字“9”.在我筛选结果后,我想将它们应用到UITableView,因此“

  2. ios – 重用UICollectionView中的单元格时,会短暂显示重用的UICollectionViewCell的旧内容

    我正在使用UICollectionView来显示从URL异步加载的图片网格.我的集合视图使用可重用单元格来显示UICollectionViewCells.当不重复使用单元格时,所有内容都会正确显示,但是当我滚动一下时,重用的单元格会在它们开始正常行为之前短暂闪烁旧内容.以下是自定义UICollectionViewController的实现:这是自定义UICollectionViewCell的实现.

  3. 如何使用AWS iOS SDK从设备上传图像并设置为公开

    由于看起来我们只限于桶数,我试图找出如何完成以下操作:>我有一个iOS应用,用户可以上传一个个人资料图片.>个人资料可以被任何人查看(我想要公开).>理想情况下,我可以上传到一个桶(例如:myprofilepics.s3.amazonaws.com)>理想情况下,每个用户都可以上传到自己的子文件夹(例如:myprofilepics.s3.amazonaws.com/images/userXXX/>

  4. AmazonS3Client putObject只适用于iOS主线程?

    我正在尝试使用AmazonS3Client来放置对象.奇怪的是,它只在我在iOS主线程上运行putObject代码时才起作用.代码基本上是这样的:存在桶,我有权限等.如果我只是打电话在我的代码中,整个视频上传方法运行,但我从来没有得到任何状态回调,没有抛出异常,并且对象永远不会放入其存储桶在S3上.当我在主线程上调用上传函数时,如下所示:我获得进度回调,一切正常,对象成功放入S3存储桶.有没有人知道putObject是否仅适用于iOS主线程?

  5. 如何将我的ios应用程序中的图像上传到存储在aws s3上的存储桶中,并在Swift中完成所有这些操作?

    v=WZ54fH8AFUk(不幸的是它在目标C在这里,我会很感激,如果你能帮助我一个迅捷版……解决方法请确保您有一个桥接标头,您可以在其中导入相应的AWS标头.GitHub上有一个名为here的例子.这样做应该使S3方法可用.-Rohan

  6. swift -结构体

  7. 如何将 Parse 服务器迁移到 Heroku 或 AWS

    然而,Parse已在一月份关闭,官方建议,在2017年1月28日彻底停止服务之前,请迁移Parse应用。在本节教程里,我们会讲述如何将parse-server部署到Salesforce旗下知名的云服务供应商Heroku。部署到Heroku有两种方法可供选择。接下来,部署Heroku。将Parse服务器部署到Heroku首先在电脑上安装Heroku工具条,从链接中可以找到官方安装指南。你的parse-server已经成功地部署到了Heroku。这个变量表示parse在Heroku服务器上的地址。

  8. OpenStack Swift发展历程

    Swift是一个提供RESTfulHTTP接口的对象存储系统,最初起源于Rackspace的CloudFiles,目的是为了提供一个和AWSS3竞争的服务。Swift于2010年开源,是OpenStack最初的两个项目之一。早在2010年,Swift就迎来了第一个Rackspace之外的商用案例——韩国电信,大家很熟悉的维基百科、ebay等也是Swift的用户。相信随着互联网技术的应用架构逐渐被传统行业接受,对象存储和Swift将受到越来越广泛的关注。总而言之,Swift和S3是当前对象存储里面最重要的两

  9. Android S3布局与Galaxy Nexus布局

    我开发了一个应用程序,应该针对galaxyNexus和galaxyS3.两者都有720x1280屏幕分辨率,我只在我的应用程序中使用’dp’值.资源存在于’layout-xhdpi’和’drawable-xhdpi’文件夹中.Nexus上的布局看起来非常精细,但是S3上的填充值略有偏差.我认为是因为S3的屏幕尺寸更大,密度不同.如何为Nexus和S3创建单独的文件夹,以便我可以考虑不同的屏幕尺寸?

  10. 解决RHAS3中Apache2的PHP上传文件大小的限制

    近日将论坛从VBB2升级到VBB3,将上传附件大小设置为2M,可每次上传超过500K的附件都会出错,而之前使用VBB2时却正常。再回忆一下,发现以前用VBB2时的操作系统为RHAS2.1,用的自带的Apache1.x版本,后来升级成VBB3之前,顺便也把系统更换为RHAS3,而RHAS3自带的Apache为2.x版本,其配置文件的组织方式有所改变,也许自己编译安装的Apache就不会出现此种问题,可自己比较懒,不喜欢编译,呵呵.

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部