我有一个由AWS(EC2和其他服务)支持的iOS应用程序。但是我有一个关于将用户生成的文件(如图像和视频)上传到后端的问题。我正在考虑将它们直接上传到S3存储桶或上传到EC2,并让EC2将它们传递到S3存储桶。我倾向于上传到EC2,因为我不希望任何人对我的文件系统有写入权限,但是,这可能需要我的EC2实例大量繁重工作。如果我直接上传到S3,我如何确保安全性,而不使用临时URL(我使用SDWebImage下载和缓存图像,临时URL会导致SDWebImage下载相同的图像,而不是从本地检索)?任何建议将不胜感激。使用AWS EC2 Endpoint或S3的iOS
回答
所以你要通过Lambda去耦这个。
请勿使用EC2。没有必要。
创建一个S3桶被称为 “应用程序,无论”
保持你的水桶PRIVATE。您不必为用户提供访问权限。他们可以使用生成的URL进行保密。让每个用户都有自己的文件夹(这是前缀)。
看上去很花哨,从用户端放入S3的每一项。使用ios'arc4'公式随机生成每个密钥或任何你想要的,然后附加文件类型。因此,blahblab.png
将元数据字段放入名为thumbnail
的文件以及文件名的值加上-thumb
。所以blahblah-thumb.png
回顾:您正在上传一个文件到S3,元数据字段为thumbnail
。而已。
然后创建一个Lambda函数来响应S3中的每个PUT文件。如果你喜欢Node.JS,可以使用imagemagick模块(很适合你)来生成一个128x128的缩略图或其他东西。 lambda函数接收文件的S3数据。获取源文件的主文件(键名),缩略图元数据将成为输出。运行您的IM功能并将输出文件放入S3存储桶中。现在你有两个文件在桶中。大。
现在,当你列出这些文件,不要下载每一个。从文件获取元数据并获取元数据中的密钥的presignedUrl
。
这将会很快。例如,在App Store上查看iSkore的高清摄像头。
这真的取决于你的限制原因。如果您授予应用程序将图像上传到您的EC2服务器的权限,然后将其转发给S3,那么您获得的是什么? S3允许您使用重要的预先修订来限制基于用户的对象(如果您使用Cognito进行身份验证,这很容易)。例如,你可以这样做,所以你的S3结构就像/images/{userId}/myImage.jpg,每个用户只能上传到他们的文件夹。你可以把它完全私人的,也可以让其他用户从该文件夹读不能写等...
的几点思考: - 你可以黑名单用户潜在 - 你可以限制请求,或检查和拒绝某些图像 - 您可以拥有比S3提供的更复杂的安全模型
您可以使用API Gateway作为前两种用例。
如果您确实想使用ec2,那么预签名的URL将会更改。我不确定SDWebImage是如何工作的,所以我不能评论它的缓存能力。
- 1. AWS Windows EC2从S3上传
- 2. 集成AWS EC2,RDS和... S3?
- 3. 使用AWS和EC2
- 4. 如何使用AWS sdk进行s3和ec2的文件操作?
- 5. ASP.Net ec2 + s3
- 6. iOS AWS S3实施教程
- 7. 在AWS EC2和S3中使用ELK设置日志服务器
- 8. AWS EC2:发射使用CLI
- 9. 使用grails的AWS S3
- 10. 亚马逊AWS EC2使用
- 11. AWS :: S3 :: NoConnection使用Rails中的aws-s3 gem建立的错误
- 12. 直接上传到S3或通过EC2?
- 13. 如何在AWS s3和AWS ec2之间传输文件
- 14. 使用AWS CLI从S3下载文件
- 15. AWS S3 Java API
- 16. Hbase on AWS EC2
- 17. Minio与iOS的AWS S3 SDK SignatureDoesNotMatch
- 18. 使用BFTask和AWS SDK控制上传到S3的iOS v2
- 19. EC2服务器或AWS SimpleDB上的MongoDB?
- 20. 正在使用InstanceProfileCredentialsProvider正确的方式从Ec2实例连接到AWS S3?
- 21. AWS S3的静态网站的子目录,到现在从EC2
- 22. AWS CLI S3访问
- 23. jammit-S3与AWS-S3
- 24. AWS S3下载iOS - 请求超时
- 25. AWS S3在ios上分段上传
- 26. 使用AWS ios SDK在S3上MultipartUpload上传
- 27. AWS IAM在EC2中的角色和从JupyterHub访问S3
- 28. 将脚本从AWS EC2上传到S3的Shell脚本
- 29. 来自EC2的AWS S3存储桶存取
- 30. AWS,EC2 - CreateTags RunInstances
如果S3存储区是私人的,我怎样才能使用SDWebImage与网址下载图片?访问将被拒绝否? – jackson
您打电话给's3.getSignedUrl',它为您提供了一个临时链接,您提供给SDWebImage – iSkore
我明白了。那个链接每次改变都正确吗? SDWebImage如何缓存图像呢?因为我认为SDWebImage使用url作为从磁盘和内存查询的关键字,如果URL更改,关键字也会随之更改。然后SDWebImage会认为它从来没有得到这个图像,所以它会从互联网上下载它。 – jackson