首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSURLSessionUploadTask如何读取服务器响应

NSURLSessionUploadTask如何读取服务器响应
EN

Stack Overflow用户
提问于 2016-08-08 14:20:53
回答 1查看 1.1K关注 0票数 14

我正在使用NSURLSessionUploadTask上传一个文件。

下面是我的一些代码不完整的部分

代码语言:javascript
复制
let session:NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: NSOperationQueue .mainQueue())

let sessionTask:NSURLSessionUploadTask = session.uploadTaskWithStreamedRequest(request

但问题是,我无法获得服务器发送的JSON响应。

下面的委托也没有启动,但其他委托正在启动。

代码语言:javascript
复制
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData)

我正在使用的代码:

代码语言:javascript
复制
func sendFileToServer1(fileName:String,fileData:NSData,serverURL:String){

let body = NSMutableData()

let mimetype = "application/octet-stream"
//        let mimetype = "video/quicktime"

let boundary = "Boundary-\(NSUUID().UUIDString)"
let url = NSURL(string: serverURL)

let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
request.setValue("multipart/form-data; boundary=----\(boundary)", forHTTPHeaderField: "Content-Type")
body.appendData("------\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"file\"; filename=\"\(fileName)\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Type: \(mimetype)\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData(fileData)
body.appendData("\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("------\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Content-Disposition:form-data; name=\"submit\"\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("Submit\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
body.appendData("------\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!)
request.HTTPBody=body

let config:NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
let session:NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: NSOperationQueue .mainQueue())
let sessionTask:NSURLSessionUploadTask = session.uploadTaskWithStreamedRequest(request)
sessionTask.resume()
}

func URLSession(session: NSURLSession, didBecomeInvalidWithError error: NSError?) {
    print("error")
 }

func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
    print("Bytes sent:\(bytesSent) Total bytes sent:\(totalBytesSent) Total bytes expected to send:\(totalBytesExpectedToSend)")
}

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
    print("response:\(response as! NSHTTPURLResponse)")
}

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
    print("data didReceiveData")
}

我已同意代表们的意见。

  1. NSURLSessionDataDelegate
  2. NSURLSessionDelegate
  3. NSURLSessionTaskDelegate

谢谢

EN

回答 1

Stack Overflow用户

发布于 2016-08-17 11:12:27

由于NSURLSessionUploadTaskNSURLSessionDataTask的子类,所以可以尝试使用来自NSURLSessionDataDelegate的方法

代码语言:javascript
复制
func urlSession(_ session: NSURLSession, dataTask: NSURLSessionDataTask, didReceive response: NSURLResponse, completionHandler: (NSURLSession.ResponseDisposition) -> Void)

根据文件:

通知委托,数据任务从服务器接收到初始答复(标头)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38831704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档