Добавьте параметр размещения контента для uploadTask, используя URLSession и URLRequest - PullRequest
0 голосов
/ 06 февраля 2019

Я использую URLSession 'uploadTask из файла'

func uploadTask(with request: URLRequest, fromFile fileURL: URL) -> URLSessionUploadTask

Почти все работает нормально, но теперь нашему серверу нужен дополнительный параметр «uploadKey», который будет передаваться как расположение контента вместе с fileName.

Это можно сделать, сгенерировав многочастный запрос с добавлением размещения контента, как мы обычно делаем.

Я хочу добавить его, используя «uploadTask from file», чтобы избежать нехватки памяти.Подскажите пожалуйста как это сделать.

1 Ответ

0 голосов
/ 07 февраля 2019

Прочитав вопрос, я подозреваю, что вы тонко не понимаете, что делают задачи загрузки (и, к сожалению, документация Apple нуждается в серьезном улучшении в этой области, что не помогает).Эти задачи не загружают файл так же, как веб-браузер, если вы выбрали файл в форме загрузки.Вместо этого они используют файл в качестве тела запроса на загрузку.Я думаю, что они по умолчанию предоставляют вменяемый Content-Type на основе имени файла, хотя я не уверен, но они не отправляют данные в кодировке формы.

Итак, если яполностью понимая вопрос, вы можете выбрать следующие варианты:

  1. Продолжайте использовать многочастное кодирование.При желании запишите составное тело в файл, а не храните его в памяти, и используйте задачу загрузки, чтобы получить тело из этого файла, а не из объекта NSData.
  2. Загрузите файл, который вы пытаетесь отправить,в незашифрованном виде, как полнота тела выгрузки, и предоставьте любые дополнительные параметры, которые вам нужно предоставить в виде параметров GET в самом URL.
  3. Используйте некоторые другие кодировки, такие как JSON или буферы протокола.

В любом случае код сервера будет определять, какой из этих подходов поддерживается.Если вы можете изменить код сервера, то я бы порекомендовал второй подход.Он немного более эффективен, чем первый, гораздо эффективнее, чем JSON, и его легче реализовать, чем любой другой подход.

...