在swift中上传图像AWS S3存储桶

我试图上传一个图像到一个桶S3 AWS,我正在使用下面的代码。 但我用它来上传到一个图像存储在一个variables或imageView.image?

let ext = "jpg" let imageURL = NSBundle.mainBundle().URLForResource("imagename", withExtension: ext) print("imageURL:\(imageURL)") let uploadRequest = AWSS3TransferManagerUploadRequest() uploadRequest.body = imageURL uploadRequest.key = NSProcessInfo.processInfo().globallyUniqueString + "." + ext uploadRequest.bucket = S3BucketName uploadRequest.contentType = "image/" + ext let transferManager = AWSS3TransferManager.defaultS3TransferManager() transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in if let error = task.error { print("Upload failed ❌ (\(error))") } if let exception = task.exception { print("Upload failed ❌ (\(exception))") } if task.result != nil { let s3URL = NSURL(string: "http://s3.amazonaws.com/\(self.S3BucketName)/\(uploadRequest.key!)")! print("Uploaded to:\n\(s3URL)") } else { print("Unexpected empty result.") } return nil } 

我修改了你的代码,试试这个

  let ext = "jpg" let imageURL = NSBundle.mainBundle().URLForResource("imagename", withExtension: ext) print("imageURL:\(imageURL)") let uploadRequest = AWSS3TransferManagerUploadRequest() uploadRequest.body = imageURL uploadRequest.key = "\(NSProcessInfo.processInfo().globallyUniqueString).\(ext)" uploadRequest.bucket = S3BucketName uploadRequest.contentType = "image/\(ext)" let transferManager = AWSS3TransferManager.defaultS3TransferManager() transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in if let error = task.error { print("Upload failed ❌ (\(error))") } if let exception = task.exception { print("Upload failed ❌ (\(exception))") } if task.result != nil { let s3URL = NSURL(string: "http://s3.amazonaws.com/\(self.S3BucketName)/\(uploadRequest.key!)")! print("Uploaded to:\n\(s3URL)") } else { print("Unexpected empty result.") } return nil } 

或者你可以使用我的代码下载到AWS s3,它对我来说工作的很好。 这段代码是用swift写成的。

 func uploadButtonPressed(_ sender: AnyObject) { if documentImageView.image == nil { // Do something to wake up user :) } else { let image = documentImageView.image! let fileManager = FileManager.default let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("\(imageName!).jpeg") let imageData = UIImageJPEGRepresentation(image, 0.99) fileManager.createFile(atPath: path as String, contents: imageData, attributes: nil) let fileUrl = NSURL(fileURLWithPath: path) var uploadRequest = AWSS3TransferManagerUploadRequest() uploadRequest?.bucket = "BucketName" uploadRequest?.key = "key.jpeg" uploadRequest?.contentType = "image/jpeg" uploadRequest?.body = fileUrl as URL! uploadRequest?.serverSideEncryption = AWSS3ServerSideEncryption.awsKms uploadRequest?.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void in DispatchQueue.main.async(execute: { self.amountUploaded = totalBytesSent // To show the updating data status in label. self.fileSize = totalBytesExpectedToSend }) } let transferManager = AWSS3TransferManager.default() transferManager?.upload(uploadRequest).continue(with: AWSExecutor.mainThread(), withSuccessBlock: { (taskk: AWSTask) -> Any? in if taskk.error != nil { // Error. } else { // Do something with your result. } return nil }) } 

}

谢谢! 🙂

这是图像上传使用AWS S3桶下面的代码我实现了图像上传从画廊上传

 func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { if(picker.sourceType == UIImagePickerControllerSourceType.PhotoLibrary) { selectedImageUrl = info[UIImagePickerControllerReferenceURL] as! NSURL myImageViewC.image = info[UIImagePickerControllerOriginalImage] as? UIImage myImageViewC.backgroundColor = UIColor.clearColor() myImageViewC.contentMode = UIViewContentMode.ScaleAspectFit self.dismissViewControllerAnimated(true, completion: nil) startUploadingImage() } else if(picker.sourceType == UIImagePickerControllerSourceType.Camera) { myImageViewC.image = info[UIImagePickerControllerOriginalImage] as? UIImage myImageViewC.backgroundColor = UIColor.clearColor() myImageViewC.contentMode = UIViewContentMode.ScaleAspectFit self.dismissViewControllerAnimated(true, completion: nil) myActivityIndicator.startAnimating() let S3BucketName = "streetsmartb2/sai" let date3 = NSDate() let timeInMi = "\(CLongLong((floor(date3.timeIntervalSince1970 * 1000))))" let S3UploadKeyName = "File.jpg\(timeInMi)" //print("value1:\(S3UploadKeyName)") //settings temp location for image let imageName = NSURL.fileURLWithPath(NSTemporaryDirectory() + S3UploadKeyName).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 = UIImageJPEGRepresentation(image, 0.5) let data = CreateTeamViewController().resizeImage(image) data.writeToFile(localPath, atomically: true) //let imageData = NSData(contentsOfFile: localPath)! let photoURL = NSURL(fileURLWithPath: localPath) let uploadRequest = AWSS3TransferManagerUploadRequest() uploadRequest.body = photoURL uploadRequest.key = S3UploadKeyName uploadRequest.bucket = S3BucketName uploadRequest.contentType = "image/jpeg" let transferManager = AWSS3TransferManager.defaultS3TransferManager() // Perform file upload transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in if let error = task.error { print("Upload failed with error: (\(error.localizedDescription))") dispatch_async(dispatch_get_main_queue()) { // self.returnToAddView() self.myActivityIndicator.stopAnimating() CreateTeamViewController().displayAlertMessage("Error uploading Image") } } if let exception = task.exception { print("Upload failed with exception (\(exception))") dispatch_async(dispatch_get_main_queue()) { // self.returnToAddView() self.myActivityIndicator.stopAnimating() CreateTeamViewController().displayAlertMessage("Error uploading Image") } } if task.result != nil { // Remove locally stored file self.remoteImageWithUrl(uploadRequest.key!) let s3URL = NSURL(string: "https://s3.amazonaws.com/\(S3BucketName)/\(uploadRequest.key!)")! // print("Uploaded to:\n\(s3URL)") dispatch_async(dispatch_get_main_queue()) { // self.returnToAddView() self.myActivityIndicator.stopAnimating() self.createTeamImageButton?.setImage(self.loadImage, forState: .Normal) self.uploadedImageURL = (s3URL.URLString) // self.teamImageNameCreate = self.uploadedImageURL // self.createTeamImageButton.sd_setImageWithURL(NSURL(string: self.uploadedImageURL)!, forState: .Normal, placeholderImage: UIImage(named: "no_image_one.jpg")) let url = NSURL.init(string: self.uploadedImageURL) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { // do some task let imagedata = NSData(contentsOfURL: url!) if let imageObj = UIImage.init(data: imagedata!) { self.createTeamPic = imageObj } dispatch_async(dispatch_get_main_queue()) { self.createTeamImageButton?.setImage(self.createTeamPic, forState: .Normal) } } } } else { // print("Unexpected empty result.") } return nil } } }