ios - 如何快速下载文件?

标签 ios swift file download

我刚开始学习来自 Android 的 iOS 的 apple swift 编程。我现在基本上可以阅读和操作 swift 代码,还学习了 iOS swift 编程中使用的一些常用类,但仍然对语法和所有内容感到困惑。

我正在尝试下载文件。比如,假设来自这个 URL

var url = "http://www.mywebsite.com/myfile.pdf"

点击按钮。也许也有视觉进步

通过在 stackoverflow 中搜索,我偶然发现了 Alamofire。我可能会尝试,但我不确定这是否是最适合我的方法。

所以,我想问一下,在实现我的目标方面,我有哪些选择(iOS7 和 iOS8)。另外,利弊会很棒!

最佳答案

没有 Alamofire 的示例下载器类:

class Downloader {
    class func load(URL: NSURL) {
        let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration()
        let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil)
        let request = NSMutableURLRequest(URL: URL)
        request.HTTPMethod = "GET"
        let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
            if (error == nil) {
                // Success
                let statusCode = (response as NSHTTPURLResponse).statusCode
                println("Success: \(statusCode)")

                // This is your file-variable:
                // data
            }
            else {
                // Failure
                println("Failure: %@", error.localizedDescription);
            }
        })
        task.resume()
    }
}

这是在您自己的代码中使用它的方法:

class Foo {
    func bar() {
        if var URL = NSURL(string: "http://www.mywebsite.com/myfile.pdf") {
            Downloader.load(URL)
        }
    }
}

Swift 3 版本

另请注意将大文件下载到磁盘上而不是内存中。参见`downloadTask:

class Downloader {
    class func load(url: URL, to localUrl: URL, completion: @escaping () -> ()) {
        let sessionConfig = URLSessionConfiguration.default
        let session = URLSession(configuration: sessionConfig)
        let request = try! URLRequest(url: url, method: .get)

        let task = session.downloadTask(with: request) { (tempLocalUrl, response, error) in
            if let tempLocalUrl = tempLocalUrl, error == nil {
                // Success
                if let statusCode = (response as? HTTPURLResponse)?.statusCode {
                    print("Success: \(statusCode)")
                }

                do {
                    try FileManager.default.copyItem(at: tempLocalUrl, to: localUrl)
                    completion()
                } catch (let writeError) {
                    print("error writing file \(localUrl) : \(writeError)")
                }

            } else {
                print("Failure: %@", error?.localizedDescription);
            }
        }
        task.resume()
    }
}

关于ios - 如何快速下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28219848/

相关文章:

ios - 使用 Swift 在 iPhone 应用程序中颠倒方向

iphone - UIImage 在下载时损坏

c++ - 在 C++ 中拆分文件

ios - 地址转换成坐标

ios - 当应用程序进入前台时,哪个 View Controller 处于事件状态?

swift - 如何从更高的闭包级别访问隐式闭包参数

ios - Swift:按钮在 UIScrollView 中不起作用

ios - 快速组合 : How to specify the Error type of tryMap(_:)?

java - 使用 BufferedReader 和 FileReader 从文件中读取

python - 在 tar 文件中获取文件字节偏移量(和长度)的方法