NSURLSession приводит к загрузке 0B изображений в GCS - PullRequest
1 голос
/ 30 апреля 2020

Я использую NSURLSession, настроенный как фоновый сеанс, для загрузки нескольких изображений в корзину в GCS. Для одного теста использовалось 26 изображений, каждое размером около 10 МБ. Тесты выполняются при сильном подключении к Wi-Fi и при приближении батареи к 100%, если она не заряжается активно. Я создаю этот NSURLSession в тот момент, когда приложение является фоновым и уведомляется через обработчик истечения срока фоновой задачи.

NSURLSession код:

let config = URLSessionConfiguration.background(withIdentifier: identifier)
config.waitsForConnectivity = true
config.allowsCellularAccess = true
config.isDiscretionary = false

let session = URLSession(configuration: config, delegate: self, delegateQueue: nil)
session.sessionDescription = identifier

Создание запросов на загрузку:

for (signedGCSURLDestination, image) in images {
  let request = URLRequest(url: signedGCSURLDestination, method: .put)
  request.headers.add(name: "Content-Type", value: "image/jpeg")

  let task = session.uploadTask(with: request, fromFile: file)

  task.taskDescription = identifier
  task.resume()
} 

В конечном итоге все изображения в GCS Bucket имеют размер 0B. Перед переходом на фоновую NSURLSession мы используем Alamofire на переднем плане приложения, и эти изображения прекрасно загружаются в сегменты.

Я начинаю исследовать использование задачи фоновой обработки, чтобы потенциально продолжать использовать код Alamofire, пока приложение свернуто, но это отдельная проблема от NSURLSession, просто не работающего.

1 Ответ

0 голосов
/ 06 мая 2020

Загружаемый файл не имел необходимых разрешений после блокировки устройства. Установка атрибута completeUntilFirstUserAuthentication для каждого файла, который я хотел загрузить, решила проблему.

FileManager.default.setAttributes([FileAttributeKey.protectionKey: FileProtectionType.completeUntilFirstUserAuthentication],
                                           ofItemAtPath: path)

Я предполагаю, что загрузка началась до того, как устройство было заблокировано, и похоже, что загрузка NSURLSession происходит параллельно , Таким образом, загрузка всех файлов, возможно, началась, следовательно, в GCS хранятся пустые заполнители, равные 0B, а затем они никогда не завершаются из-за блокировки файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...