swift – NSURLSessionUploadTask超时
发布时间:2020-12-14 04:55:22 所属栏目:百科 来源:网络整理
导读:我正在使用AFNetworking将视频文件上传到服务器,我几乎每次尝试上传文件时都会暂停上传. 我正在尝试同时上传多个文件,到目前为止,我尝试的最大值是2,因为它们保持超时. 相关守则: for i in 0 ... 2 { let filePath : NSURL = NSURL(fileURLWithPath: "filep
我正在使用AFNetworking将视频文件上传到服务器,我几乎每次尝试上传文件时都会暂停上传.
我正在尝试同时上传多个文件,到目前为止,我尝试的最大值是2,因为它们保持超时. 相关守则: for i in 0 ... 2 { let filePath : NSURL = NSURL(fileURLWithPath: "filepathgoeshere") let tempFilename = String(format: "%f",NSDate.timeIntervalSinceReferenceDate()) let tempFileUrl = NSURL(fileURLWithPath: "(NSTemporaryDirectory())(tempFilename)") let request = AFHTTPRequestSerializer().multipartFormRequestWithMethod("POST",URLString: getAPIURL(),parameters: parameters,constructingBodyWithBlock: { (formData : AFMultipartFormData!) -> Void in formData.appendPartWithFileURL(filePath,name: "file",fileName: "file",mimeType: "video/mp4",error: nil) },error: nil) // Work around for problem with multi-part requests not giving a content-length and being rejected by S3 // See: https://github.com/AFNetworking/AFNetworking/issues/1398 AFHTTPRequestSerializer().requestWithMultipartFormRequest(request,writingStreamContentsToFile: tempFileUrl,completionHandler: { (error: NSError!) -> Void in var manager : AFURLSessionManager = AFURLSessionManager(sessionConfiguration: NSURLSessionConfiguration.defaultSessionConfiguration()) var progress : NSProgress? = nil var uploadTask : NSURLSessionUploadTask = manager.uploadTaskWithRequest(request,fromFile: tempFileUrl,progress: &progress,completionHandler: { (response: NSURLResponse!,responSEObject: AnyObject!,error: NSError!) -> Void in NSFileManager.defaultManager().removeItemAtURL(tempFileUrl,error: nil) if let err = error { println("There was an error :(") println("Error: (err.localizedDescription)") // TODO: Add in relevant error catching successCallback(success: false) } else { successCallback(success: true) } }) if let testNil = progress { progressCallback(progress: progress) } uploadTask.resume() }) } 解决方法func multipleFileUploadRequestSessionManager(url:String,parameters:NSDictionary,fileInfo:NSArray,completionHandler: (response:NSURLResponse?,responSEObject:AnyObject?,error:NSError?) -> ()) { let request : NSMutableURLRequest = AFHTTPRequestSerializer().multipartFormRequestWithMethod("POST",URLString: url,constructingBodyWithBlock: { (formData) -> Void in if(fileInfo.count > 0) { for file in fileInfo { var fileData = file.valueForKey("fileData") as NSData var name = file.valueForKey("filenameData") as String var fileName = file.valueForKey("fileName") as String var mimeType = file.valueForKey("mimeType") as String formData.appendPartWithFileData(fileData,name: name,fileName: fileName,mimeType: mimeType) } } },error: nil) let conf : NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() let manager : AFURLSessionManager = AFURLSessionManager(sessionConfiguration: conf) var progress : NSProgress? = nil var uploadTask:NSURLSessionUploadTask = manager.uploadTaskWithStreamedRequest(request,progress: nil) { (response,responSEObject,error) -> Void in completionHandler(response:response,responSEObject:responSEObject,error:error) } uploadTask.resume() } 这可能有助于您进行多个文件上传 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |