func startUploadingImage() {
var localFileName:String?
// Issue #1: This here causes a segmentation fault 11 - Worked completely fine in swift 2.3
if let imageToUploadUrl = selectedImageUrl {
let phResult = PHAsset.fetchAssets(withALAssetURLs: [imageToUploadUrl], options: nil)
localFileName = phResult.firstObject?.fileManager
}
if localFileName == nil {
return
}
// Configure AWS Cognito Credentials
let myIdentityPoolId = ""
let credentialsProvider:AWSCognitoCredentialsProvider = AWSCognitoCredentialsProvider(regionType:AWSRegionType.euWest1, identityPoolId: myIdentityPoolId)
let configuration = AWSServiceConfiguration(region:AWSRegionType.euWest1, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
// Set up AWS Transfer Manager Request
let S3BucketName = ""
let remoteName = localFileName!
print(remoteName)
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest?.body = generateImageUrl(remoteName)
uploadRequest?.key = remoteName
uploadRequest?.bucket = S3BucketName
uploadRequest?.contentType = "image/jpeg"
let transferManager = AWSS3TransferManager.default()
// Perform file upload
// #issue 2: Here I recieve an error of ambiguous reference to member 'continue'
transferManager.upload(uploadRequest).continue {
task -> AnyObject! in
if let error = task.error {
print("Upload failed with error: (\(error.localizedDescription))")
}
if let exception = task.exception {
print("Upload failed with exception (\(exception))")
}
if task.result != nil {
let s3URL = URL(string: "https://s3.amazonaws.com/\(S3BucketName)/\(uploadRequest.key!)")!
print("Uploaded to:\n\(s3URL)")
// Remove locally stored file
self.remoteImageWithUrl(uploadRequest.key!)
DispatchQueue.main.async {
self.submitImageToDatabase("https://s3-eu-west-1.amazonaws.com/\(S3BucketName)/\(uploadRequest.key!)")
}
}
else {
print("Unexpected empty result.")
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
看看AWS文档,但似乎找不到自swift 3以来已更新的内容(至少不是我能找到的).大多数是用Obj-c编写的,但这无济于事.
我似乎也有问题No such Module 'AWSS3',No such Module 'AWSCore'即使它们在项目构建时运行良好,我可以通过cmd单击查看文件.
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
})
}
}
Run Code Online (Sandbox Code Playgroud)
这是将图像上传到使用swift 3编写的Amazon S3的完整代码.要配置您的同源身份池,请在app delegate中添加以下代码.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
customiseAppearance()
let credentialsProvider =AWSCognitoCredentialsProvider(regionType:"YOUR REGION",identityPoolId:"YOUR POOL ID")
let configuration = AWSServiceConfiguration(region:"YOUR REGION", credentialsProvider:credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
return true
}
Run Code Online (Sandbox Code Playgroud)
让我回答这个错误没有这样的模块'AWSS3'和没有这样的模块'AWSCore',检查你是否在桥接头文件中添加了AWSS3框架和AWSCore框架
#import <AWSCore/AWSCore.h>
Run Code Online (Sandbox Code Playgroud)
谢谢!!
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |