微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – NSURLSessionUploadTask超时

我正在使用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()
}

这可能有助于您进行多个文件上传

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐