Я пытаюсь загрузить файл из своего приложения в репозиторий OneDrive Business с помощью API Graph.
, и я знаю, что для этого есть два шага ...
Создайте сеанс загрузки с помощью вызова - https://graph.microsoft.com/v1.0/me/drive/root:/hello.docx:/createUploadSession
(этот вызов API работает нормально)
Ответ на вышеприведенный вызов API возвращает URL
, который я использую для загрузкифайл.
Вот как я создаю запрос для этого вызова API -
var request = NSMutableURLRequest(url:url)
request.timeoutInterval = TimeInterval(60)
request.httpMethod = "PUT"
request.setValue("application/json", forHTTPHeaderField: "accept")
uploadRequest.setValue("26", forHTTPHeaderField:"Content-Length")
uploadRequest.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")
let contentLength = Int(file.contentLength) ?? 0;
uploadRequest.setValue("bytes 0-\(25)/\(contentLength)", forHTTPHeaderField:"Content-Range");
Загрузка заметки осуществляется с использованием URLSessionUploadTask
-
self.session.uploadTask(with: request as URLRequest, fromFile: self.fileUrl)
Запускается загрузка, и файл загружается на 100%, но при последнем обновлении происходит сбой с ответом, как показано ниже
<NSHTTPURLResponse: 0x1c0a39420> { URL: https://indxyz-my.sharepoint.com/personal/ram_kapoor_indxyz_onmicrosoft_com/_api/v2.0/drive/items/01BSG3ERN6Y2GOVW7725BZO354PWSELRRZ/uploadSession%3Fguid='cb929739-8c1c-48b2-9be4-3dc1cd2aef09'&path='~tmp0F_hello.docx'&overwrite=True&rename=False&dc=0&tempauth=redacted }
{ Status Code: 400, Headers {
"Content-Length" = (
0
);
Date = (
"Mon, 22 Oct 2018 10:46:09 GMT"
);
"Strict-Transport-Security" = (
"max-age=31536000"
);
microsoftsharepointteamservices = (
"16.0.0.8210"
);
"ms-cv" = (
"nprY6jvwAHAoBWzVPpyQgQ.0"
);
p3p = (
"CP=\"ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI\""
);
"request-id" = (
"ead89a9e-f03b-7000-2805-6cd53e9c9081"
);
sprequestguid = (
"ead89a9e-f03b-7000-2805-6cd53e9c9081"
);
"x-content-type-options" = (
nosniff
);
"x-frame-options" = (
SAMEORIGIN
);
"x-ms-invokeapp" = (
"1; RequireReadOnly"
);
"x-msedge-ref" = (
"Ref A: A4A5ACB248D94992BD7B83645B01A952 Ref B: BOM01EDGE0220 Ref C: 2018-10-22T10:46:09Z"
);
"x-powered-by" = (
"ASP.NET"
);
} }
Мое приложение Android работает нормально, так как там указан размер буфера - Мне кажется, это связано с размером буфера, как Microsoft упомянула в документе здесь
Загрузка байтов в сеанс загрузки
Чтобы загрузить файл или его часть, ваше приложение отправляет запрос PUT на значение uploadUrl, которое получаетd в ответе createUploadSession.Вы можете загрузить весь файл или разбить файл на несколько диапазонов байтов, если максимальный размер байта в любом данном запросе меньше 60 МБ.
Фрагменты файла должны быть последовательно загружены по порядку.Загрузка фрагментов не по порядку приведет к ошибке.
Примечание. Если ваше приложение разбивает файл на несколько диапазонов байтов, размер каждого диапазона байтов ДОЛЖЕН быть кратным 320 КиБ (327 680 байтов).Использование размера фрагмента, который не делится равномерно на 320 КБ, приведет к ошибкам при фиксации некоторых файлов.
Я не уверен, в какой части я ошибаюсь и как указать размер буфера при загрузке сеансазадача в iOS.