代码之家  ›  专栏  ›  技术社区  ›  Agent Smith

具有标识符的后台urlsession已存在

  •  1
  • Agent Smith  · 技术社区  · 6 年前

    我有一个s3service,它是一个管理所有与s3相关的上传和下载的单例。 当我上传第一张图片时,它运行良好,但是如果我尝试连续上传一张图片,它会给我这个警告,并且完成块永远不会被调用。

    具有标识符的后台urlsession com.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")
                }
            })
    }
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Agent Smith    6 年前

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

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

    • 如果这些是针对应用程序中的不同用户的(例如注册),并且如果我们希望保留 AWSS3转换功能 为每个用户单独注册 AWSS3转换功能 使用不同的密钥(最好是同一用户的同一密钥)并使用该密钥查找。