具有标识符的后台URLSession已经存在

时间:2018-12-13 14:32:02

标签: swift amazon-s3 nsurlsession awss3transferutility aws-sdk-ios

我有一个S3Service,它是一个单例,它管理所有与S3相关的上载和下载。 当我上传第一张图片时,它可以正常工作,但是如果我尝试连续上传一张图片,它会向我发出此警告,并且不会调用完成块。

  

标识符为com.amazonaws.AWSS3TransferUtility.Identifier.TransferManager的后台URLSession已经存在。

这是我上传方法的外观:

if let data = image.jpegData(compressionQuality: 0.5) {
        let transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: S3Service.TRANSFER_MANAGER_KEY)
        transferUtility.uploadUsingMultiPart(data: data, bucket: EnvironmentUtils.getBucketName(), key: filename, contentType: "image/jpg", expression: nil, completionHandler: { task,error in

            if let error = error {
                print(error.localizedDescription)
            } else {
                print("Image upload success")
            }
        })
}

1 个答案:

答案 0 :(得分:3)

调用注册转移实用程序AWSS3TransferUtility.register(with: serviceconfig, forKey: KEY)导致了上述问题。应该牢记两件事。

  • AWSS3TransferUtility在每个应用程序会话中仅应注册一次。然后,我们可以使用AWSS3TransferUtility.S3TransferUtilityForKey在需要的地方获取实例。

  • 如果这些用于应用程序中的不同用户(例如,注册),并且如果我们想让AWSS3TransferUtility与每个用户分开,请使用不同的密钥注册AWSS3TransferUtility(最好是相同用户的相同密钥),然后使用该密钥进行查找。