【问题标题】:NSURLSession Upload File To Server SwiftNSURLSession 上传文件到服务器 Swift
【发布时间】:2016-02-01 10:45:04
【问题描述】:

我正在创建一个 Internet 速度测试应用程序,但似乎无法正确地将 zip 文件上传到 ftp 服务器。它是一个开放的服务器。我希望能够上传文件并显示进度。

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) {
        //
    }

}

【问题讨论】:

    标签: swift ftp nsurlsession


    【解决方案1】:

    您是否正确阅读了文档。如果您查看此方法的文档,

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

    这个方法是可选的,除非你需要支持(相对 模糊)多部分/x-mixed-replace 内容类型。有了那个内容 类型,服务器发送一系列部分,每个部分都旨在 替换前面的部分。会话在 每个部分的开头,然后您应该显示、丢弃或 否则酌情处理前一部分。

    如果你不提供这个委托方法,会话总是允许 任务继续。

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

    【讨论】:

    • 好的,没有更多错误,但didSendBodyData 不起作用?
    • 你确定网站就这样接受你的数据吗?
    • 这是一个 ftp 服务器,我不确定,如何检查它接受的数据?
    • 我认为它接受任何文件类型。我需要指定要上传的文件类型吗?
    猜你喜欢
    • 2015-06-27
    • 2018-04-12
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 2011-01-27
    • 2015-02-27
    相关资源
    最近更新 更多