在 Swift 中获取远程文件的顶部
Get top of remote file in Swift
通过互联网在多个文件中有一行。我想避免下载整个文件。每个文件可长可短。所需的行通常大约是第 15 行 - 总是不同,但总是在前 500 个字节内。
有没有办法只获取远程文件的开头部分?
然后我可以使用正则表达式模式找到所需的行。
虽然我知道如何在临时文件中下载文件。位置并将其复制到适当的位置,我认为该过程太多且浪费。
这是一个例子:
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()
}
PS。如果您可以包含一种方法来查找以 "abc=xyz" 开头的行,那也会很有帮助,我想要 "xyz".
要只下载部分内容,您需要一个支持发送范围的服务器。要对此进行测试,请发出 HEAD
请求并检查服务器是否以 Accept-Range: bytes
header 响应。如果是这样,您可以通过在 GET
请求中添加 header 之类的 Range: bytes=0-499
来请求部分内容,以仅接收最初的 500 个字节。
通过互联网在多个文件中有一行。我想避免下载整个文件。每个文件可长可短。所需的行通常大约是第 15 行 - 总是不同,但总是在前 500 个字节内。
有没有办法只获取远程文件的开头部分?
然后我可以使用正则表达式模式找到所需的行。
虽然我知道如何在临时文件中下载文件。位置并将其复制到适当的位置,我认为该过程太多且浪费。 这是一个例子:
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()
}
PS。如果您可以包含一种方法来查找以 "abc=xyz" 开头的行,那也会很有帮助,我想要 "xyz".
要只下载部分内容,您需要一个支持发送范围的服务器。要对此进行测试,请发出 HEAD
请求并检查服务器是否以 Accept-Range: bytes
header 响应。如果是这样,您可以通过在 GET
请求中添加 header 之类的 Range: bytes=0-499
来请求部分内容,以仅接收最初的 500 个字节。