首页 > 解决方案 > 具有标识符的后台 URLSession 已存在

问题描述

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

具有标识符的后台 URLSessioncom.amazonaws.AWSS3TransferUtility.Identifier.TransferManager已存在。

这就是我上传方法的样子:

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")
            }
        })
}

标签: swiftamazon-s3nsurlsessionawss3transferutilityaws-sdk-ios

解决方案


对注册传输实用程序的调用AWSS3TransferUtility.register(with: serviceconfig, forKey: KEY)导致了上述问题。有两件事需要牢记。

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

  • 如果这些是针对应用程序内的不同用户的(例如注册),并且如果我们想AWSS3TransferUtility为每个用户保持独立,请AWSS3TransferUtility使用不同的密钥(最好是同一用户的相同密钥)注册并使用该密钥进行查找。


推荐阅读