Так что после небольшой борьбы за получение аутентификации, работающей с graph.microsoft.com, я теперь могу читать сайты и списки sharepoint.
Я также могу читать диски, и мне удалось создать папку и файл на сайте с вызовами REST, иди ко мне !. Проблема в том, что, хотя я могу «создать файл», и он отображается на my.sharepoint.com, он имеет длину 0 контента.
Я использовал эту страницу, чтобы провести меня через нее:
https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/listitem_create
Код, который я использовал для создания файла, выглядит следующим образом
$currentFile = new File($file);
$contents = $currentFile->read();
$currentFile->close();
$url = 'https://graph.microsoft.com/beta/sharePoint/site/drives/'.$this->driveId.'/'.$location.'/items/'.$parent_id.'/children';
$tempData = $this->Controller->Temp->read('Office');
$headers = array('Authorization' => 'Bearer '.$tempData['token']['access_token'], 'Content-Type' => 'application/json');
$data = json_encode(array('name' => basename($file), 'file' => new stdClass()));
$sckt = new HttpSocket(array('ssl_verify_host' => false));
$apiData = $sckt->post($url, $data, array('header' => $headers));
Вы правы, увидев, что я не отправляю $ content var all вместе с запросом json, потому что это нарушит запрос. И я начал копаться и увидел, что в разделе OneDrive содержимое файла отправляется в виде двоичной строки через json
Поэтому я попытался поместить ‘content’ => $ blob (я предполагаю, что я должен использовать контент здесь) в массиве json, но я просто получаю «некорректный запрос». Я также пытался опубликовать как текст / обычный, но он принимает только запросы JSON. Форма / multipart также не работала, поэтому я пробовал всевозможные опции и ключи массива, но, похоже, ничто не помогло мне получить содержимое моего файла на sharepoint.
Я тоже пробовал то же самое с «Columnset» (https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/api/listitem_update).
Итак, подведем итог: теперь я могу создать файл, создать папку, изменить ее, обновить и создать метаданные, изменить имена. Но я не могу загрузить содержимое файла !!!
В настоящий момент я надеюсь, что это просто что-то глупое, чего я не вижу, так что вы можете смеяться надо мной и дать мне несколько потрясающих советов после того, как вы закончите смеяться над ними. Потому что я чувствую, что это не то, что работает в бета-версии, что было бы странно.
Таким образом, после многих проб и ошибок и некоторого чтения я обнаружил, что я немного глуп, но t.b.h. документация не очень полезна в этом и очень отсутствует, но она находится в бета-версии, так что да …
Ответ был довольно прост, как только вы это выясните. Способ загрузки или создания файла на sharepoint с помощью API REST graph.microsoft.com заключается в том, что сначала необходимо создать держатель файла 0 размера, как показано выше. Затем используйте код под загрузкой / применением содержимого файла.
Обратите внимание на / содержание часть в URL.
$currentFile = new File($file);
$contents = $currentFile->read();
$currentFile->close();
$url = 'https://graph.microsoft.com/beta/sharePoint/site/drives/'.$this->driveId.'/items/'.$parent_id.'/children/'.basename($file).'/content';
$tempData = $this->Controller->Temp->read('Office');
$headers = array('Authorization' => 'Bearer '.$tempData['token']['access_token'], 'Content-Length' => strlen($contents), 'Content-Type' => 'text/plain');
$sckt = new HttpSocket(array('ssl_verify_host' => false));
$apiData = $sckt->put($url, $contents, array('header' => $headers));
И теперь он принимает текстовый / простой запрос в качестве ввода!
Надеюсь, это поможет кому-то еще 🙂
Нужно несколько твиков. В заголовках не забудьте включить Content-Length через $ contents.strlen в заголовки. Установите Content-Type на text / plain, и, наконец, тело сообщения должно быть $ content.
Оказывается, вам нужно добавить двоеточие после имени файла, и оно должно работать.
$url = 'https://graph.microsoft.com/beta/sharePoint/site/drives/'.$this->driveId.'/items/'.$parent_id.'/children/'.basename($file).':/content';