如何在Alamofire中以多部分形式上传大文件?

问题描述 投票:0回答:1

我正在尝试以多部分形式的 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)
    }
}

它进入故障并打印:

alamofire 响应错误:URLSessionTask 失败并出现错误: 操作无法完成。留言太长

Postman 上的

相同的 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>”)})

ios swift alamofire multipartform-data
1个回答
0
投票

尝试上传所有尺寸的图像或视频

    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)")
    })
}
© www.soinside.com 2019 - 2024. All rights reserved.