Проблема загрузки изображения в AWS S3 Bucket - PullRequest
0 голосов
/ 24 сентября 2018

Когда я загружаю изображение в корзину s3.Я получил ниже ошибки.Я видел эту ошибку в переполнении стека, но не понимаю.Можете ли вы направить меня.На каком этапе я допустил ошибку.

Ошибка: Ошибка Domain = com.amazonaws.AWSS3ErrorDomain Code = 0 "(null)" UserInfo = {RequestId = 9524E756031421C5, Bucket = xxxxxx-xxxxxx-xxxxx,HostId = uxxxxxxxxxx, Message = корзина, к которой вы пытаетесь получить доступ, должна быть адресована с использованием указанной конечной точки.Пожалуйста, отправляйте все будущие запросы к этой конечной точке., Код = PermanentRedirect, Конечная точка = xxxxxx-xxxxxx-xxxxx.s3.amazonaws.com}

Я настроил свой poolid другие вещи в plist, которые приведены ниже.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>amazonaws.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
        <key>amazonaws.com.cn</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.0</string>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>
<key>AWS</key>
<dict>
    <key>CredentialsProvider</key>
    <dict>
        <key>CognitoIdentity</key>
        <dict>
            <key>Default</key>
            <dict>
                <key>PoolId</key>
                <string>us-east-1:xxxxxxxxxxxxx</string>
                <key>Region</key>
                <string>us-east-1</string>
            </dict>
        </dict>
    </dict>
    <key>S3TransferManager</key>
    <dict>
        <key>Default</key>
        <dict>
            <key>Region</key>
            <string>us-east-1</string>
        </dict>
    </dict>
    <key>S3</key>
    <dict>
        <key>Default</key>
        <dict>
            <key>Region</key>
            <string>us-east-1</string>
        </dict>
    </dict>
</dict>

У меня есть нижеприведенный код для загрузки изображения.

 let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.USEast1,
                                                            identityPoolId:"us-east-1:xxxxxxxxxxxx")
    let configuration = AWSServiceConfiguration(region:.USEast1, credentialsProvider:credentialsProvider)
    AWSServiceManager.default().defaultServiceConfiguration = configuration
    AWSS3TransferManager.register(with: configuration!, forKey: "USEast1S3TransferManager")

    self.transferManager = AWSS3TransferManager.default()


func uploadImage(){

    if let filepath = Bundle.main.path(forResource: "temp", ofType: "jpg") {

        let imageData = Data()

        let fileUrl = NSURL(fileURLWithPath: filepath)


        do {
            try imageData.write(to: fileUrl as URL, options: Data.WritingOptions.atomic)
        } catch let error as NSError {
            print("Could not save \(error), \(error.userInfo)")
        }


        let uploadRequest = AWSS3TransferManagerUploadRequest()
        uploadRequest?.bucket = bucketName
        uploadRequest?.key = "key.jpg"
        uploadRequest?.contentType = "image/jpg"
        uploadRequest?.body = fileUrl as URL


        transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in

            if let error = task.error as NSError? {
                if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) {
                    switch code {
                    case .cancelled, .paused:
                        break
                    default:
                        print("Error uploading: \(String(describing: uploadRequest?.key!) ) Error: \(error)")
                    }
                } else {
                    print("Error uploading: \(String(describing: uploadRequest?.key!)) Error: \(error)")
                }
                return nil
            }

            let uploadOutput = task.result
            print("Upload complete for: \(uploadRequest?.key!)")
            return nil
        })

    }

}

Еще одна вещь, которую я хочу уточнить, есть ли необходимость установить «Ключ доступа» и «Секретный ключ»"в приведенном выше коде или достаточно PoolId для этого.

Thnaks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...