Raj*_*ker 13 server-response json ios nsurlsession nsurlsessionuploadtask
我正在使用NSURLSessionUploadTask上传文件.
以下是我的代码的一些部分不完整
let session:NSURLSession = NSURLSession(configuration: config, delegate: self, delegateQueue: NSOperationQueue .mainQueue())
let sessionTask:NSURLSessionUploadTask = session.uploadTaskWithStreamedRequest(request
Run Code Online (Sandbox Code Playgroud)
但问题是我无法获得服务器发回的JSON响应.
以下代表也没有解雇,但其他代表正在解雇
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData)
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码:
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")
}
Run Code Online (Sandbox Code Playgroud)
我向代表们表示赞同
谢谢
uploadTaskWithStreamedRequest:如果您在创建请求时创建数据,则不应使用。这是为了上传大量数据,您需要从文件中读取数据并一次编码一点,然后一次发送一点。(如上所述,如果您这样做,则必须提供 needNewBodyStream 方法。)
您很可能应该使用uploadTaskWithRequest:fromData:并提供正文数据 blob 作为fromData参数。
您也不需要在请求中设置正文数据。NSURLSession 通常会忽略这一点。
您还可以考虑uploadTaskWithRequest:fromData:completionHandler:,这将允许您指定一个块来在上传完成时运行整个数据,从而使您不必提供委托方法来累积数据。
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |