gpt4 book ai didi

ios - Alamofire 4 - 使用 gzip 编码上传分段

转载 作者:行者123 更新时间:2023-11-29 05:51:28 25 4
gpt4 key购买 nike

我有一个工作项目,使用 Alamofire 处理所有请求,包括上传多部分数据。目前这工作正常,但我们希望转而使用 GZIP 来处理所有请求和响应。我正在使用 gzip swift 库,现在可以通过请求接收 gzip 压缩的数据,但我不知道如何对多部分数据进行 gzip 编码,这导致调用失败。

我已经搜索了一个解决方案,虽然我遇到过一篇关于它的文章,但提供的示例适用于较旧的 Alamofire 和 Swift 版本。我尝试对其进行修改以使其正常工作,但出现了一些我无法解决的错误。

我的请求代码如下:

            self.sessionManager.upload(
multipartFormData: { multipartFormData in
multipartFormData.append("\(sUUID)".data(using: String.Encoding.utf8)!, withName: "sUUID")
multipartFormData.append(sStream, withName: "files[]", fileName: fileName, mimeType: "image/\(sExt)")
multipartFormData.append("\(convertedEventID)".data(using: String.Encoding.utf8)!, withName: "nEventID")
multipartFormData.append("\(sExt)".data(using: String.Encoding.utf8)!, withName: "sExt")
multipartFormData.append("0".data(using: String.Encoding.utf8)!, withName: "bRecurring")
multipartFormData.append("\(fileName)".data(using: String.Encoding.utf8)!, withName: "sDescription")
multipartFormData.append("File Attached By User".data(using: String.Encoding.utf8)!, withName: "sWordDocumentType")
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: "sWordDocumentName")
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: "sSname")
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: "sEmailRecip")
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: "sEmailSender")
multipartFormData.append("".data(using: String.Encoding.utf8)!, withName: "sNotes")
multipartFormData.append("ME".data(using: String.Encoding.utf8)!, withName: "sAgent")
},
to: "/Upload",
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseString { response in
let decompressedData: Data
if response.data!.isGzipped {
decompressedData = try! response.data!.gunzipped()
} else {
decompressedData = response.data!
}
NotificationCenter.default.post(name: .didReceiveData, object: self, userInfo: ["pass" : 1])
completion(true, 200, decompressedData, nil)
}
upload.uploadProgress { progress in
print(progress.fractionCompleted)
}
case .failure(let encodingError):
print(encodingError)
completion(false, 404, nil, encodingError)
}
})

最佳答案

如果您需要进行 gzip 编码等后期处理,您将无法使用内置的 upload(multipartFormData:...) 方法。相反,您需要单独使用 Alamofire 的多部分编码,生成数据,对其进行 gzip,然后使用 Alamofire 上传。

此外,您无需手动解压缩响应。只要返回的相应 Content-Encoding header 表明它已被 gzip 压缩,它就应该自动为您解压缩。

最后,您可以使用 Data("string".utf8) 更轻松地从 String 创建 Data 值。

关于ios - Alamofire 4 - 使用 gzip 编码上传分段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55629829/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com