2016-02-01 95 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) { 

,除非你需要支持的(相对 晦涩)的multipart/X - 混合替换内容类型此方法是可选的。使用该内容 类型,服务器发送一系列部分,其中每个部分旨在将 替换为以前的部分。会话在每个零件的起始位置调用该方法,然后您应该根据需要显示,放弃或 以其他方式处理前一部分。

如果您不提供此委托方法,则会话始终允许 任务继续。

这里,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