在Swift中部分下载数据



我正在尝试在Swift中开发下载加速器。它应该获取文件的大小并将其分为n零件。然后,它应该通过运行多个线程立即下载它们,然后合并零件。

我阅读C# - 创建下载加速器,不幸的是它没有帮助。

我可以通过

轻松地完成多个线程部分
DispatchQueue.main.async {
    // The new thread
}

但另一部分更难。我通常下载这样的文件:

try Data(contentsOf: URL(string: assetsUrl!)!)

或我可以做这个答案中解释的事情

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()
    }
}

但这不是C-这很简单,并且不接受许多论点。如何使其从服务器获得"第一个200_000字节"?

首先,服务器需要实现HTTP范围请求。如果不是,并且您无法控制服务器,那么您将无法执行此操作。

如果服务器支持http范围请求,则需要使用请求标头指定范围,如下所示:https://developer.mozilla.org/en-us/docs/web/http/http/range_requestst e>

基本要素是您首先发送Head请求,以找出服务器是否支持HTTP范围请求。这取决于响应是否包括具有非零值的接受范围标头。

如果服务器支持HTTP范围请求,则可以向资源提出请求,例如,将范围标头设置为字节= 0-1023(取决于指定的Accept-Ranges标头的格式,在此中案例字节)

相关内容

  • 没有找到相关文章

最新更新