Почему метод cancelByProducingResumeData() возвращает ноль для задач загрузки?IOS

Программируем под IOS
Ответить
Anonymous
 Почему метод cancelByProducingResumeData() возвращает ноль для задач загрузки?

Сообщение Anonymous »

Я реализую возобновляемую загрузку на iOS на основе этой документации и видео wwdc.
Сервер правильно отправляет информационный ответ 104 Upload Resumption Supported, который я получаю в своем делегате. Однако когда я отменяю задачу загрузки с помощью cancelByProducingResumeData(), она всегда возвращает ноль.
Настройка
  • iOS 18/26
  • HTTP/2-сервер с TLS (с использованием SwiftNIO + Network.framework)
  • Сервер реализует протокол возобновляемой загрузки черновика
Код клиента

Код: Выделить всё

class VideoUploader: NSObject, URLSessionTaskDelegate, URLSessionDataDelegate {
private var urlSession: URLSession!
private var uploadTask: URLSessionUploadTask?

func uploadVideo(fileURL: URL) {
var request = URLRequest(url: URL(string: "https://localhost:3000/upload")!)
request.httpMethod = "POST"
request.setValue("?0", forHTTPHeaderField: "Upload-Incomplete")
request.setValue("3", forHTTPHeaderField: "Upload-Draft-Interop-Version")

uploadTask = urlSession.uploadTask(with: request, fromFile: fileURL)
uploadTask?.resume()

// Cancel after 3 seconds to test resume data
Task {
try? await Task.sleep(for: .seconds(3))
guard let uploadTask else { return }
let resumeData = await uploadTask.cancelByProducingResumeData()
print("Resume data: \(resumeData)") // Always prints nil
}
}

// This IS called - server sends 104 correctly
func urlSession(_ session: URLSession, task: URLSessionTask, didReceiveInformationalResponse response: HTTPURLResponse) {
print("Received 104: \(response.statusCode)")
print("Location: \(response.allHeaderFields["Location"] ?? "none")")
}
}
Вот репозиторий с серверным кодом и приложением, воспроизводящим проблему.
Есть идеи, что я мог упустить или даже как это можно отладить?>

Подробнее здесь: https://stackoverflow.com/questions/798 ... load-tasks
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»