반응형
안녕하세염.
이번에는 AWS Amplify에서 S3 storage에 이미지를 저장하고 불러오는 방식을 소개하겠습니다.
AWS Amplify와 S3 Storage세팅의 경우 공식문설를 참고하시면 됩니다.
https://docs.amplify.aws/swift/start/getting-started/
1. 이미지 선택하기
우선 저장할 이미지를 휴대폰에서 가져와야 합니다.
위 사진과 같이 저장 할 이미지를 스마트폰에서 가져오기 위한 코드부터 우선적으로 소개해 보겠습니다.
extension AddArticleViewController : UIImagePickerControllerDelegate, UINavigationControllerDelegate{
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
imageView.image = image
let uuid = UUID().uuidString
let fileName = "\(uuid).jpeg"
let url = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true)
.appendingPathComponent(uuid, isDirectory: false)
.appendingPathExtension("jpeg")
if let data = image.jpegData(compressionQuality: 0.8) {
do {
try data.write(to: url)
self.selectedFileName = fileName
self.selectedFileUrl = url
uploadImageOrigin(url: url, fileName: fileName) //Call the updated function to store to AWS bucket
} catch {
let error = UIAlertController(title: "ERROR", message: "Handle the error, i.e. disk can be full", preferredStyle: UIAlertController.Style.alert)
let yError = UIAlertAction(title: "확인", style: UIAlertAction.Style.default, handler: nil)
error.addAction(yError)
present(error, animated: true, completion: nil)
}
}
print(info)
}
dismiss(animated: true, completion: nil)
}
}
해당 코드의 경우 아이폰의 사진 앱이나 카메라로 부터 이미지를 불러오는 코드입니다.
사진을 사용자가 만든 앱으로 가져올 때는 jpeg 형식으로 가져오게 됩니다.
2. S3 Storage에 이미지 저장하기
이미지를 저장하기위해서는 저장할 이미지의 이름과 경로로 s3 storage에 저장하게 됩니다.
func uploadImageOrigin(url: URL, fileName: String){
let localImageUrl = url
let fileNameKey = fileName
let uploadTask = Amplify.Storage.uploadFile(
key: fileNameKey,
local: localImageUrl
)
progressSink = uploadTask
.inProcessPublisher
.sink { progress in
print("Progress: \(progress)")
}
resultSink = uploadTask
.resultPublisher
.sink {
if case let .failure(storageError) = $0 {
print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
}
receiveValue: { data in
print("Completed: \(data)")
}
}
3. S3 Storage로 부터 이미지 가져오기
s3 storage로 부터 이미지를 가져올 때 역시, 가져올 이미지의 이름과 경로를 알고 있어야 합니다.
func downloadImage(fileName: String) async -> UIImage {
let url: URL
do {
url = try await Amplify.Storage.getURL(key: fileName)
} catch {
print("Failed to get URL for image in homeview: \(error)")
return UIImage(named: "Luvky_Icon.png")!
}
let downloadTask = Amplify.Storage.downloadFile(
key: fileName,
local: url,
options: nil
)
Task {
for await progress in await downloadTask.progress {
print("Progress: \(progress)")
}
}
do {
let (data, _) = try await URLSession.shared.data(from: url)
let image = UIImage(data: data) ?? UIImage(named: fileName)!
return image
} catch {
print("Failed to get URL for image: \(error)")
print(url)
return UIImage(named: "Luvky_Icon.png")!
}
}
s3 storage에 관한 내용은 이렇게가 끝입니다.
저 같은 경우 어떻게 이미지를 다뤄야 할지 몰라서 오랜 시간이 걸렸는데,
이 글을 보시게 되는 분들은 적어도 제 앱에서는 잘 작동하기 때문에
믿고 사용하셔도 됩니다.
이렇게 이번 주제는 끝을 내도록 하고,
다음 주제는 ios에서 카카오 로그인 구현 방법에 대하여 작성하겠습니다.
반응형
'ios 앱개발' 카테고리의 다른 글
[SWIFT] IOS에서 채팅기능 구현하기(1) with AWS Amplify (0) | 2024.02.16 |
---|---|
[SWIFT] IOS에서 카카오 로그인 구현하기 with AWS Amplify (0) | 2024.02.11 |
[SWIFT] IOS 에서 AWS Amplify를 이용해 CRUD 구현하기 (1) | 2024.02.08 |
ios에서 AWS Amplify S3를 이용하여 image upload, download하기 (0) | 2023.07.21 |
ios에서 AWS Amplify를 사용할 때 GraphQL 수정방법 (0) | 2023.07.15 |