Swift 上传数据的URLSession.shared.uploadTask
Swift 上传数据的URLSession.shared.uploadTask

Swift 上传数据的URLSession.shared.uploadTask

URLSession.shared.uploadTask 是一个方法,用于在 iOS 或 macOS 应用中通过 URLSession 执行上传任务。与普通的 dataTask 类似,它也用于网络请求,但专门用于将数据上传到服务器,例如上传文件、图片或其他数据到 API 接口。

使用场景

uploadTask 适合需要将数据发送到服务器并期望服务器返回响应的场景。常见的使用包括:

  1. 上传图片或视频
  2. 提交表单数据
  3. 上传文件

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 关闭后继续上传)。

多部分表单数据,如果需要上传图片等文件数据并包含文本表单字段,可能需要手动设置请求头和请求体。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注