我正在尝试以多部分形式的 POST 方法上传两个图像(10MB 和 1MB 大小)。
这样使用Alamofire上传方法。
AF.upload(multipartFormData: { multipartFormData in
multipartFormData.append(InputStream(data: imageMedia.data), // 10MB data
withLength: UInt64(imageMedia.data.count),
name: imageMedia.type.rawValue,
fileName: imageMedia.filename,
mimeType: imageMedia.mimeType)
multipartFormData.append(InputStream(data: maskMedia.data), // 1MB data
withLength: UInt64(maskMedia.data.count),
name: maskMedia.type.rawValue,
fileName: maskMedia.filename,
mimeType: maskMedia.mimeType)
}, with: request).responseData { afDataResponse in
switch afDataResponse.result {
case .success(let data):
completion(data)
case .failure(let error):
print("error with alamofire response \(error.localizedDescription)")
completion(nil)
}
}
它进入故障并打印:
Postman 上的alamofire 响应错误:URLSessionTask 失败并出现错误: 操作无法完成。留言太长
相同的 POST 请求工作正常,所以这不是服务器问题。 有什么办法解决这个问题吗?
编辑: 对于较小的图像(5MB 和 1MB),一切正常。
编辑2: 这是错误:
sessionTaskFailed(错误:错误域=NSPOSIXErrorDomain代码=40 “留言太长” UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <8F7404DD-2947-4B18-9F23-C23F0483F440>.<1>, _kCFStreamErrorDomainKey=1,NSErrorPeerAddressKey=
{长度= 16,容量= 16,字节= 0x100201bbd8ef26350000000000000000},_kCFStreamErrorCodeKey = 40, _NSURLErrorRelatedURLSessionTaskErrorKey=( “本地上传任务<8F7404DD-2947-4B18-9F23-C23F0483F440>。<1>”)})
尝试上传所有尺寸的图像或视频
func upload(){
let URL = "\(Constants.baseURL)\(path)"
let _headers : HTTPHeaders = ["lang" : "language".localized(),"Content-Type": "application/json","jwt" : AuthManager.authKey()]
var params : [String : Any] = [:]
AF.upload(multipartFormData: { [self] (multipartFormData) in
for (key, value) in params {
multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
}
let timestamp = NSDate().timeIntervalSince1970
multipartFormData.append(self.VideoFileData, withName: "url", fileName: "\(Date().timeIntervalSince1970).mp4", mimeType: "video/mp4")
}, to: URL, method: .post, headers: _headers).responseJSON{ [self] (response) in
switch response.result{
case .success(let upload):
do {
self.loadingView.hide()
let Lists = try JSONDecoder().decode(StoreDataVideoModel.self, from: response.data!)
print(Lists)
if(Lists.status == 200){
}else{
}
} catch let error{
self.requestStatus(code: -1, Msg: "\(error.localizedDescription)")
}
if response.error != nil{
self.requestStatus(code: -1, Msg: "\(response.error?.localizedDescription ?? "")")
return
}
case .failure(let error):
print("Error in upload: \(error.localizedDescription)")
print("wrong")
self.requestStatus(code: -1, Msg: "\(error.localizedDescription)")
}
}.uploadProgress(queue: .main, closure: { progress in
//Current upload progress of file
print("Upload Progress: \(progress.fractionCompleted)")
})
}