我看过许多亚马逊文档,但是找不到足够的信息来使用Swift将图像上传和下载到S3。 我怎样才能做到这一点?
经过大量研究后,我开始了这项工作,
import AWSS3 import AWSCore
上载:
我认为您已经实施UIImagePickerControllerDelegate了。
UIImagePickerControllerDelegate
第1步:
创建用于保存网址的变量:
var imageURL = NSURL()
创建上传完成处理程序obj:
var uploadCompletionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
步骤2: 从中获取图片网址imagePickerController(_:didFinishPickingMediaWithInfo:):
imagePickerController(_:didFinishPickingMediaWithInfo:)
imageURL
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]){ //getting details of image let uploadFileURL = info[UIImagePickerControllerReferenceURL] as! NSURL let imageName = uploadFileURL.lastPathComponent let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! as String // getting local path let localPath = (documentDirectory as NSString).stringByAppendingPathComponent(imageName!) //getting actual image let image = info[UIImagePickerControllerOriginalImage] as! UIImage let data = UIImagePNGRepresentation(image) data!.writeToFile(localPath, atomically: true) let imageData = NSData(contentsOfFile: localPath)! imageURL = NSURL(fileURLWithPath: localPath) picker.dismissViewControllerAnimated(true, completion: nil)
}
步骤3: 设置为“将图像上传到存储桶” uploadImage后,调用此方法imageURL:
uploadImage
func uploadImage(){ //defining bucket and upload file name let S3BucketName: String = "bucketName" let S3UploadKeyName: String = "public/testImage.jpg" let expression = AWSS3TransferUtilityUploadExpression() expression.uploadProgress = {(task: AWSS3TransferUtilityTask, bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) in dispatch_async(dispatch_get_main_queue(), { let progress = Float(totalBytesSent) / Float(totalBytesExpectedToSend) print("Progress is: \(progress)") }) } self.uploadCompletionHandler = { (task, error) -> Void in dispatch_async(dispatch_get_main_queue(), { if ((error) != nil){ print("Failed with error") print("Error: \(error!)"); } else{ print("Sucess") } }) } let transferUtility = AWSS3TransferUtility.defaultS3TransferUtility() transferUtility.uploadFile(imageURL, bucket: S3BucketName, key: S3UploadKeyName, contentType: "image/jpeg", expression: expression, completionHander: uploadCompletionHandler).continueWithBlock { (task) -> AnyObject! in if let error = task.error { print("Error: \(error.localizedDescription)") } if let exception = task.exception { print("Exception: \(exception.description)") } if let _ = task.result { print("Upload Starting!") } return nil; } }
下载:
func downloadImage(){ var completionHandler: AWSS3TransferUtilityDownloadCompletionHandlerBlock? let S3BucketName: String = "bucketName" let S3DownloadKeyName: String = "public/testImage.jpg" let expression = AWSS3TransferUtilityDownloadExpression() expression.downloadProgress = {(task: AWSS3TransferUtilityTask, bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) in dispatch_async(dispatch_get_main_queue(), { let progress = Float(totalBytesSent) / Float(totalBytesExpectedToSend) print("Progress is: \(progress)") }) } completionHandler = { (task, location, data, error) -> Void in dispatch_async(dispatch_get_main_queue(), { if ((error) != nil){ print("Failed with error") print("Error: \(error!)") } else{ //Set your image var downloadedImage = UIImage(data: data!) } }) } let transferUtility = AWSS3TransferUtility.defaultS3TransferUtility() transferUtility.downloadToURL(nil, bucket: S3BucketName, key: S3DownloadKeyName, expression: expression, completionHander: completionHandler).continueWithBlock { (task) -> AnyObject! in if let error = task.error { print("Error: \(error.localizedDescription)") } if let exception = task.exception { print("Exception: \(exception.description)") } if let _ = task.result { print("Download Starting!") } return nil; } }
参考 用于上传图片
参考 下载图片
非常感谢jzorz