ios 上的 AWSS3TransferUtilityErrorDomain 代码=2

Posted

技术标签:

【中文标题】ios 上的 AWSS3TransferUtilityErrorDomain 代码=2【英文标题】:AWSS3TransferUtilityErrorDomain Code=2 on ios 【发布时间】:2017-02-25 13:51:35 【问题描述】:
AWSS3TransferUtilityErrorDomain Code=2

ios 上上传达到 100% 而 android 工作正常时出现此错误。

我正在使用react-native-s3。但这似乎是 sdk 或我的存储桶策略的问题,但我不知道如何解决。

更多信息: 上传时,我使用了从我们的服务器生成的 CognitoCredentials、区域、IdentityPool 和 sessionToken。

编辑: 这只发生在 iOS 上。 Android 运行良好。

【问题讨论】:

【参考方案1】:

所以看来我的问题是错误的地区。不过我不知道为什么 Android 可以工作。

【讨论】:

【参考方案2】:

通常这是一个 S3 存储桶策略问题,即权限。以下是 s3 的示例策略脚本。

<key>AWS</key>
    <dict>
        <key>CredentialsProvider</key>
        <dict>
            <key>CognitoIdentity</key>
            <dict>
                <key>Default</key>
                <dict>
                    <key>PoolId</key>
                    <string>us-west-2:xxxxx</string>
                    <key>Region</key>
                    <string>USWest2</string>
                </dict>
            </dict>
        </dict>
        <key>S3TransferUtility</key>
        <dict>
            <key>Default</key>
            <dict>
                <key>Region</key>
                <string>**USEast1**</string>
            </dict>
        </dict>
    </dict>

【讨论】:

我在哪里添加这个?在 Info.plist 中? @Damathryx 是的。你明白了吗?我现在有这个问题。 @MaxNelson 对我来说这是不正确的区域。我不知道为什么它可以在 android 上运行【参考方案3】:

我知道这是一个老问题,但是最好写下我的情况和解决方案。 在我的 iOS (Swift) 项目中,我尝试在登录后上传图片(使用 Cognito),但出现此错误:

Error Domain=com.amazonaws.AWSS3TransferUtilityErrorDomain Code=2 "(null)" 

下面的代码看起来一切正常:

transferUtility.uploadData(
            data,
            key: "my-picture.png",
            contentType: "image/png",
            expression: expression,
            completionHandler: completionHandler).continueWith  (task) -> AnyObject? in
                if let error = task.error 
                    print("Error: \(error.localizedDescription)")
                    DispatchQueue.main.async 
                        print("Error on upload: \(error.localizedDescription)")
                    
                

                if let _ = task.result 
                    DispatchQueue.main.async 
                        print("Upload Starting!")
                    
                

                return nil;
        

解决方案在AWS Amplify Storage documentation。正如那里所说,我应该写像key: "private/user_identity_id/my-picture.png"这样的键值

也许,它会在未来帮助任何人。

【讨论】:

【参考方案4】:

在向 S3 存储桶添加策略时检查您的 ARN。它应该是 喜欢

arn:aws:s3:::yourBucketName/*

如果您直接在您的存储桶中上传而不使用任何子 目录。

【讨论】:

【参考方案5】:

就我而言,问题的原因在于文件名中的特殊符号,尤其是%。在上传文件之前过滤文件名中的特殊符号解决了这个问题。

【讨论】:

以上是关于ios 上的 AWSS3TransferUtilityErrorDomain 代码=2的主要内容,如果未能解决你的问题,请参考以下文章

iOS - iOS 上的以下 LAContext 错误日志是啥意思?

iOS 6 上的allowAirPlayVideo 属性

iOS 14 上的 UICollectionView 列表布局问题

iOS 14 上的 NSNumberFormatter 错误

iOS 13 上的 AVAssetReferenceRestrictions

iOS13 上的 UISearchController 崩溃