2016-02-01 4 views
0

Я создаю приложение для тестирования скорости Интернета и, похоже, не могу правильно загрузить zip-файл на ftp-сервер. Это открытый сервер. Я хочу, чтобы загрузить файл и показать прогресс.NSURLSession Загрузить файл на сервер Swift

func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) не работает.

import UIKit 
import Foundation 

class Upload: UIViewController, NSURLSessionTaskDelegate, NSURLSessionDataDelegate, NSURLSessionDelegate { 

    let url: NSURL = NSURL(string: "ftp://speedtest.tele2.net/upload")! 
    let path = NSBundle.mainBundle().pathForResource("2MB", ofType: "zip") 

    func Test() { 
     let data: NSData = NSData(contentsOfFile: path!)! 

     let request: NSMutableURLRequest = NSMutableURLRequest(URL: url) 
     request.HTTPMethod = "POST" 
     request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData 
     request.timeoutInterval = 10.0 
     request.HTTPBody = data 

     let session: NSURLSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: self, delegateQueue: NSOperationQueue.mainQueue()) 
     let task: NSURLSessionUploadTask = session.uploadTaskWithRequest(request, fromData: data) 

     task.resume() 
    } 

    func URLSession(session: NSURLSession, task: NSURLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) { 
     print("\(totalBytesSent)/\(totalBytesExpectedToSend)") 
    } 

    func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) { 
     print(error) 
    } 

    func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) { 
     completionHandler(NSURLSessionResponseDisposition.Allow) 
    } 

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

} 

ответ

1

Вы правильно прочитали документацию. Если вы посмотрите на документацию по этому методу,

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) { 

Этот метод не является обязательным, если вам не нужно поддерживать (относительно неясными) многочастному/х-смешанных заменить тип содержимого. С этим типом контента сервер отправляет ряд деталей, каждый из которых предназначен для , заменив предыдущую часть. Сеанс вызывает этот метод в начале каждой части, и вы должны затем отображать, отбрасывать или , иначе обрабатывать предыдущую часть, в зависимости от ситуации.

Если вы не предоставляете этот метод делегата, сессия всегда разрешает задачу продолжить.

Здесь https://developer.apple.com/library/prerelease/ios/documentation/Foundation/Reference/NSURLSessionDataDelegate_protocol/index.html#//apple_ref/occ/intfm/NSURLSessionDataDelegate/URLSession:dataTask:didReceiveResponse:completionHandler:

Вы можете просто не реализует этот метод или то есть так, что она позволяет дальнейшей реакции.

func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) { 
    completionHandler(.Allow) 
} 
+0

Хорошо, ошибок больше нет, но 'didSendBodyData' не работает? – HovyTech

+0

Вы уверены, что сайт принимает ваши данные именно так. – Sandeep

+0

Это FTP-сервер, и я не уверен, как бы проверить, какие данные он принимает? – HovyTech

Смежные вопросы