Загрузка в S3 bucket Swift 3 issue

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:
(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
    }

}

Посмотрел документы AWS, но, похоже, не смог найти ничего, что было обновлено со времен быстрого 3 (по крайней мере, не того, что я могу найти). Большинство из них написано в Obj-c в любом случае, что не помогает.

У меня также есть проблемы, No such Module 'AWSS3'и No such Module 'AWSCore'даже несмотря на то, что они работают нормально, когда проект построен, и я могу видеть cmd, чтобы увидеть файлы.

ios,swift,

1

Ответов: 2


4 принят
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
        })
    }
}

Это полный код для загрузки изображения на Amazon S3, написанный в быстром 3 . Чтобы настроить свой собственный пул идентификаторов, добавьте следующий код в делегат приложения.

    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
}

Позвольте мне ответить на эту ошибку Нет такого модуля «AWSS3» и нет такого модуля «AWSCore», проверьте, добавили ли вы рамки AWSS3 и структуру AWSCore в мосты заголовочный файл, например

#import <AWSCore/AWSCore.h>

Благодаря!!


0

Обновите cocoapods до версии 1.0.0

список драгоценных камней | grep cocoa

cocoapods (1.0.0)

ИОС, быстры,