[英]How to upload large files with multipart form in Alamofire?
I am trying to upload two images (10MB and 1MB size) in a POST method with multipart form.我正在尝试以多部分形式的POST方法上传两张图片(10MB 和 1MB 大小)。
Using Alamofire upload method this way.以这种方式使用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)
}
}
It goes into the failure and prints:它进入故障并打印:
error with alamofire response: URLSessionTask failed with error: The operation couldn't be completed.
alamofire 响应错误:URLSessionTask 失败,错误:操作无法完成。 Message too long
消息太长
Same POST request on Postman works fine so it's not a server issue. Postman 上的相同POST请求工作正常,因此这不是服务器问题。 What is a solution to this?
有什么解决办法?
EDIT: With smaller images (5MB and 1MB) everything works fine.编辑:使用较小的图像(5MB 和 1MB)一切正常。
EDIT 2 : This is the error :编辑 2 :这是错误:
sessionTaskFailed(error: Error Domain=NSPOSIXErrorDomain Code=40 "Message too long" UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <8F7404DD-2947-4B18-9F23-C23F0483F440>.<1>, _kCFStreamErrorDomainKey=1, NSErrorPeerAddressKey=<CFData 0x600001068280 [0x1b9553c60]>{length = 16, capacity = 16, bytes = 0x100201bbd8ef26350000000000000000}, _kCFStreamErrorCodeKey=40, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalUploadTask <8F7404DD-2947-4B18-9F23-C23F0483F440>.<1>" )})
sessionTaskFailed(error: Error Domain=NSPOSIXErrorDomain Code=40 "Message too long" UserInfo={_NSURLErrorFailingURLSessionTaskErrorKey=LocalUploadTask <8F7404DD-2947-4B18-9F23-C23F0483F440>.<1>, _kCFStreamErrorDomainKey=1, NSErrorPeerAddressKey=<CFData 0x600001068280 [0x1b9553c60] >{长度= 16,容量= 16,字节= 0x100201bbd8ef26350000000000000000},_kCFStreamErrorCodeKey=40,_NSURLErrorRelatedURLSessionTaskErrorKey=(“LocalUploadTask <8F7404DD-2947-4B18-9F23-C23F0483<1>F440>)”
try this to upload all size of images or videos试试这个上传所有尺寸的图像或视频
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)")
})
} }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.