티스토리 뷰
반응형
안녕하세요 Gons 입니다.
오늘은 AWS S3 사용법을 메모해놓겠습니다.
앱에서 아마존 웹서비스 스토리지를 사용해야할 일이 생겼습니다.
공식사이트를 보니 Amplify 라는 SDK 로 하는 것 같은데
회사에서는 앰플리파이를 사용하지 않고 S3 만 사용하라는 오더도 있었어서
Amplify 없이 스토리지를 사용해보겠습니다.
pod 'AWSS3'
이런식으로 설치해주세요.
이미지를 하나 넣어주세요.
버튼 2개와 이미지뷰를 넣어주세요.
import UIKit
import AWSS3
class ViewController: UIViewController {
@IBOutlet weak var imgView: UIImageView!
let bucketName = "myapp-bucketname"
let accessKey = "SSGASLNTTCLXGJNPRLNE"
let secretKey = "60ayImDHNVF+HmgP5TCrOzvLIspqBFmpbKShOfxA"
let utilityKey = "utility-key"
var fileKey = "profile/image/"
override func viewDidLoad() {
super.viewDidLoad()
let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accessKey, secretKey: secretKey)
let configuration = AWSServiceConfiguration(region:.APNortheast2, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
let tuConf = AWSS3TransferUtilityConfiguration()
tuConf.isAccelerateModeEnabled = false
AWSS3TransferUtility.register(
with: configuration!,
transferUtilityConfiguration: tuConf,
forKey: utilityKey
)
let dateFormat = DateFormatter()
dateFormat.dateFormat = "yyyyMMdd/"
fileKey += dateFormat.string(from: Date())
fileKey += String(Int64(Date().timeIntervalSince1970)) + "_"
fileKey += UUID().uuidString + ".png"
}
func upload() {
guard let transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: utilityKey)
else
{
return
}
let expression = AWSS3TransferUtilityUploadExpression()
expression.setValue("public-read", forRequestHeader: "x-amz-acl") //URL로 이미지 읽을 수 있도록 권한 설정 (이 헤더 없으면 못읽음)
expression.progressBlock = {(task, progress) in
print("progress \(progress.fractionCompleted)")
}
var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
completionHandler = { [weak self] (task, error) -> Void in
guard let self = self else { return }
print("task finished")
let url = AWSS3.default().configuration.endpoint.url
let publicURL = url?.appendingPathComponent(self.bucketName).appendingPathComponent(self.fileKey)
if let absoluteString = publicURL?.absoluteString {
print("image url ↓↓")
print(absoluteString)
}
if let query = task.request?.url?.query,
var removeQueryUrlString = task.request?.url?.absoluteString.replacingOccurrences(of: query, with: "") {
removeQueryUrlString.removeLast() // 맨 뒤 물음표 삭제
print("업로드 리퀘스트에서 쿼리만 제거한 url ↓↓") //이 주소도 파일 열림
print(removeQueryUrlString)
}
}
guard let data = UIImage(named: "img")?.pngData()
else
{
return
}
transferUtility.uploadData(data as Data, bucket: bucketName, key: fileKey, contentType: "image/png", expression: expression,
completionHandler: completionHandler).continueWith
{
(task) -> AnyObject? in
if let error = task.error {
print("Error: \(error.localizedDescription)")
}
if let _ = task.result {
print ("upload successful.")
}
return nil
}
}
func download() {
guard let transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: utilityKey)
else
{
return
}
let expression = AWSS3TransferUtilityDownloadExpression()
expression.progressBlock = {(task, progress) in
print("progress \(progress.fractionCompleted)")
}
var completionHandler: AWSS3TransferUtilityDownloadCompletionHandlerBlock?
completionHandler = { (task, url, data, err) -> Void in
print("task finished")
DispatchQueue.main.async { [weak self] in
if let d = data {
print("img data 있음")
self?.imgView.image = UIImage(data: d)
}
}
}
transferUtility.downloadData(fromBucket: bucketName, key: fileKey, expression: expression, completionHandler: completionHandler).continueWith
{
(task) -> AnyObject? in
if let error = task.error {
print("Error: \(error.localizedDescription)")
}
if let _ = task.result {
print ("download successful.")
}
return nil
}
}
@IBAction func upload(_ sender: UIButton) {
upload()
}
@IBAction func download(_ sender: UIButton) {
download()
}
}
전체 코드입니다.
img 라는 이미지를 S3 에 업로드하고
버킷네임과 파일키로 이미지를 다운받아서 이미지뷰에 표시합니다.
업로드 시에 이렇게 로그가 나오고
저 https 주소 2가지 형식 모두 이미지가 잘 열립니다.
다운로드 시에는 이렇게 로그가 나옵니다.
이상입니다.
액세스키와 시크릿키, 버킷명과 폴더경로만 본인꺼로 바꾸셔서 사용하면 됩니다.
iOS
Swift
Xcode
반응형
'iOS Library' 카테고리의 다른 글
iOS Swift Google ML Kit - 머신러닝 번역 (Machine Learning Translation) (5) | 2023.11.01 |
---|---|
iOS Swift 네이버 그린닷 UI 구현 학습 (Circle CollectionView , Rotating Wheel , Circular Picker , Spin Menu) (2) | 2023.06.07 |
iOS Swift 저작권 표시 Library License copyright indication (0) | 2021.03.24 |
iOS Swift 라이브러리 바텀 시트 (MDC Sheets: bottom) (0) | 2021.03.17 |
iOS Swift 라이브러리 MarqueeLabel (움직이는 레이블, 흐르는 라벨, 움직이는 텍스트) (0) | 2021.03.12 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- SWIFT
- 다국어
- 테이블뷰
- SKPayment
- Reject
- AppStore
- 프로그레스
- swiftUI
- 심사
- Xcode
- 아이오에스
- 리젝
- Authorization
- custom segment
- Localized
- permission
- 엑스코드
- 인디케이터
- SKPaymentTransactionObserver
- Language
- 로컬라이징
- Localizations
- localizing
- 스위프트
- TabBar
- presentationcompactadaptation
- TabView
- ios
- indicator
- SKProductsRequestDelegate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함