我有一個由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