Swift - 从 url 获取文件大小

swift

1个回答

写回答

wangqi1000

2025-09-13 13:20

+ 关注

Swift
Swift

使用Swift语言编写IOS应用程序时,经常需要从url中获取文件的大小。获取文件大小对于展示进度条、限制下载文件大小或者对文件进行管理都非常有用。在本篇文章中,我们将介绍如何使用Swift语言从url中获取文件大小,并提供一个案例代码来帮助理解。

获取文件大小的方法

首先,我们需要从url中获取文件的元数据信息,包括文件的大小。为了实现这一点,我们可以使用URLSession的dataTask方法来发送一个HEAD请求,该请求只获取文件的元数据信息而不下载文件的内容。以下是获取文件大小的方法:

Swift

func getFileSize(from url: URL, completion: @escaping (Int64?) -> Void) {

var request = URLRequest(url: url)

request.httpMethod = "HEAD"

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

guard let httpResponse = response as? HTTPURLResponse,

let contentLength = httpResponse.allHeaderFields["Content-Length"] as? String,

let fileSize = Int64(contentLength) else {

completion(nil)

return

}

completion(fileSize)

}

task.resume()

}

在上述代码中,我们首先创建了一个URLRequest对象,并将其httpMethod设置为"HEAD",以便发送一个HEAD请求。然后,我们使用URLSession.shared.dataTask方法来发送请求,并在完成时获取响应的元数据信息。

在响应中,我们使用HTTPURLResponse的allHeaderFields属性来获取响应的所有头信息。其中,"Content-Length"头字段包含了文件的大小信息。我们将其转换为Int64类型,并在成功时将文件大小通过回调函数返回。

案例代码

现在让我们使用上述方法从url中获取文件大小,并进行一些处理。假设我们有一个下载管理器类DownloadManager,其中包含一个方法来下载文件并显示其大小。

Swift

class DownloadManager {

func downloadFile(from url: URL) {

getFileSize(from: url) { [weak self] (fileSize) in

guard let fileSize = fileSize else {

print("无法获取文件大小")

return

}

self?.startDownloading(with: url, fileSize: fileSize)

}

}

private func startDownloading(with url: URL, fileSize: Int64) {

// 在这里开始下载文件

print("开始下载文件,大小为:\(fileSize)字节")

}

}

在上述代码中,我们首先调用getFileSize方法来获取文件的大小。在获取到文件大小后,我们调用startDownloading方法来开始下载文件,并传递文件大小作为参数。

在startDownloading方法中,我们可以执行实际的下载逻辑,这里我们只是简单地打印文件大小信息。

通过使用Swift语言的URLSession和HTTPURLResponse,我们可以轻松地从url中获取文件的大小。这对于展示进度条、限制下载文件大小或者对文件进行管理都非常有用。在本文中,我们通过一个案例代码演示了如何使用这种方法来从url中获取文件大小,并开始下载文件。

希望本文能够帮助你理解如何使用Swift从url中获取文件大小,并在你的IOS应用程序中应用这一技术。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号