やりたいこと
swiftでUIImageViewに描画された画像をAWSS3にアップロードしたい
詰まっていること
以下の記事を参考にS3の設定を行った。
SwiftからS3に画像をアップロードする方法
swift
1import UIKit 2import AVFoundation 3import AWSS3 4 5class ViewController: UIViewController, 6 UINavigationControllerDelegate, 7 UIImagePickerControllerDelegate{ 8 //デバイスからの入力と出力を管理するオブジェクトの作成 9 var captureSession = AVCaptureSession() 10 11 //ラベルの設置 12 @IBOutlet weak var resultLabel: UILabel! 13 //画像の表示 14 @IBOutlet weak var cameraView: UIImageView! 15 16 // 撮影完了 17 func imagePickerController(_ imagePicker: UIImagePickerController,didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){ 18 // カメラから撮影したイメージを取得 19 if let image = info[.originalImage] as? UIImage { 20 cameraView.image = image 21 } 22 if let pngImage = image.pngData() { 23 uploadData(data: pngImage) // 追加 24 } 25 // カメラ画面を閉じる 26 imagePicker.dismiss(animated: true, completion: nil) 27 } 28 29 // アップロード 30 func uploadData(data: Data) { 31 let transferUtility = AWSS3TransferUtility.default() 32 let bucket = "バケット名" 33 let key = "ファイルパス" 34 let contentType = "image/png" 35 let expression = AWSS3TransferUtilityUploadExpression() 36 expression.progressBlock = {(task, progress) in 37 DispatchQueue.main.async { 38 } 39 } 40 41 let completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock? 42 completionHandler = { (task, error) -> Void in 43 DispatchQueue.main.async { 44 if let error = error { 45 print(error.localizedDescription) 46 } else { 47 } 48 } 49 } 50 51 transferUtility.uploadData( 52 data, 53 bucket: bucket, 54 key: key, 55 contentType: contentType, 56 expression: expression, 57 completionHandler: completionHandler 58 ).continueWith { (task) -> Any? in 59 if let error = task.error as NSError? { 60 print(error.localizedDescription) 61 } else {} 62 return nil 63 } 64 }
以下の記事を参考に
UIImageをNSDataに変換し、SwiftでUIImageに変換し直しますか?
swift
1if let image = info[.originalImage] as? UIImage { 2 cameraView.image = image 3} 4 5if let pngImage = image.pngData() { 6 uploadData(data: pngImage) 7}
次のように変換したら
if let image = info[.originalImage] as? UIImage { cameraView.image = image } let imageData: NSData = UIImagePNGRepresentation(image) uploadData(data: imageData)
NSDataに変換してくださいというエラーが来ました。
Use of unresolved identifier 'image'
'NSData' is not implicitly convertible to 'Data'; did you mean to use 'as' to explicitly convert?
UIImageDataに描画された画像をAWS s3にアップロードする良い方法を教えてください。
なるべく写真に保存せず、そのままアップロードする方法が知りたいです。
あなたの回答
tips
プレビュー