URLSession.shared.uploadTask 是一个方法,用于在 iOS 或 macOS 应用中通过 URLSession 执行上传任务。与普通的 dataTask 类似,它也用于网络请求,但专门用于将数据上传到服务器,例如上传文件、图片或其他数据到 API 接口。
使用场景
uploadTask 适合需要将数据发送到服务器并期望服务器返回响应的场景。常见的使用包括:
- 上传图片或视频
- 提交表单数据
- 上传文件
uploadTask 的几种形式
uploadTask 提供了多种形式,可以从 Data 或本地文件上传数据:
1、uploadTask(with:from:):直接使用 Data 数据作为上传内容。
if let url = URL(string: "https://example.com/upload") {
var request = URLRequest(url: url)
request.httpMethod = "POST"
let data = Data("Sample upload data".utf8)
let task = URLSession.shared.uploadTask(with: request, from: data) { data, response, error in
if let error = error {
print("Upload error: \(error.localizedDescription)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print("Response: \(responseString)")
}
}
task.resume()
}
2、uploadTask(with:fromFile:):从文件 URL 上传数据。
if let url = URL(string: "https://example.com/upload"),
let fileURL = URL(string: "file:///path/to/file.txt") {
var request = URLRequest(url: url)
request.httpMethod = "POST"
let task = URLSession.shared.uploadTask(with: request, fromFile: fileURL) { data, response, error in
if let error = error {
print("Upload error: \(error.localizedDescription)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print("Response: \(responseString)")
}
}
task.resume()
}
参数解释
with::接受一个 URLRequest 对象,用于指定上传的请求类型、URL 及其他相关设置(如 httpMethod、请求头等)。
from::接受 Data 类型,作为上传的内容。
fromFile::接受一个本地文件 URL,文件内容将被上传。
回调处理
与 dataTask 类似,uploadTask 也包含一个回调闭包,通常包含以下参数:
data:服务器返回的数据。
response:服务器的响应信息,可以将其转换为 HTTPURLResponse 来检查状态码。
error:如果上传中出现问题,此参数会包含错误信息。
注意事项
上传大文件时,建议使用文件 URL(fromFile),这样可以减少内存占用。
后台上传,可以配置自定义 URLSession 来支持后台模式(如在 App 关闭后继续上传)。
多部分表单数据,如果需要上传图片等文件数据并包含文本表单字段,可能需要手动设置请求头和请求体。