Swift-AWS S3从照片库上传图像并下载

我看过许多亚马逊文档,但是找不到足够的信息来使用Swift将图像上传和下载到S3。

我怎样才能做到这一点?

回答:

经过大量研究后,我开始了这项工作,

import AWSS3

import AWSCore

我认为您已经实施UIImagePickerControllerDelegate了。

  • 创建用于保存网址的变量:

    var imageURL = NSURL()

  • 创建上传完成处理程序obj:

    var uploadCompletionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?

从中获取图片网址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)

    }

设置为“将图像上传到存储桶” uploadImage后,调用此方法imageURL

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

以上是 Swift-AWS S3从照片库上传图像并下载 的全部内容, 来源链接: utcz.com/qa/399214.html

回到顶部