Sharepoint使用graph.microsoft.com测试版和php/cakephp上载文件内容

Sharepoint使用graph.microsoft.com测试版和php/cakephp上载文件内容,php,rest,cakephp,sharepoint,microsoft-graph-api,Php,Rest,Cakephp,Sharepoint,Microsoft Graph Api,因此,经过一段时间的努力,我现在可以通过graph.microsoft.com阅读sharepoint网站和列表了 我还可以读取驱动器,并通过REST调用go me!在teamsite中创建了一个文件夹和文件!。问题是,尽管我可以“创建文件”,并且它显示在my.sharepoint.com上,但它的内容长度为0 我用这个页面来引导我: 我用来创建文件的代码如下 $currentFile = new File($file); $contents = $currentFile->re

因此,经过一段时间的努力,我现在可以通过graph.microsoft.com阅读sharepoint网站和列表了

我还可以读取驱动器,并通过REST调用go me!在teamsite中创建了一个文件夹和文件!。问题是,尽管我可以“创建文件”,并且它显示在my.sharepoint.com上,但它的内容长度为0

我用这个页面来引导我:

我用来创建文件的代码如下

  $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));
您可以看到,我没有将$contents变量allong与json请求一起发送,因为这将中断请求。我开始四处挖掘,发现在OneDrive部分,文件内容通过json以二进制格式的字符串发送

因此,我尝试将'content'=>$blob(我在这里使用我应该使用的内容)放入json数组,但我得到的只是“格式错误的请求”。我还尝试以text/plain的形式发布,但它只接受json请求。Form/multipart也不起作用,所以我一直在尝试各种选项和数组键,但似乎没有任何东西能将我的文件内容发送到sharepoint

我也试过用“Columnset”来做同样的事情 ()

总之:我现在可以创建一个文件,创建一个文件夹,更改它,更新和创建元数据,更改名称。但是我不能上传文件内容


此刻,我希望这只是我没有看到的愚蠢的事情,所以你可以嘲笑我,在你笑完ofc后给我一些很棒的建议。因为我觉得它在测试版中还不起作用,这会有点奇怪。

需要一些调整。在标题中,确保通过$contents.strlen在标题中包含内容长度。将内容类型设置为text/plain,最后一个帖子的正文应该是$contents。

所以经过多次尝试和错误以及一些阅读,我发现我有点笨,但是t.b.h.在这方面,文档不是很有用,也非常缺乏,但它是测试版,所以是的

一旦你弄明白了,答案很容易。使用graph.microsoft.com REST api在sharepoint上上载或创建文件的方法是,必须首先创建一个0大小的文件夹,如上所示。然后使用下面的代码上传/应用文件内容

请注意url中的/content部分

  $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));
现在它确实接受文本/普通请求作为输入


希望这对其他人有所帮助:)

事实证明,您需要在文件名后添加一个冒号,它应该可以工作

$url = 'https://graph.microsoft.com/beta/sharePoint/site/drives/'.$this->driveId.'/items/'.$parent_id.'/children/'.basename($file).':/content';

感谢您的回复,但我认为这只适用于OneDrive,因为我在尝试该版本时得到了回复:“代码”:“BadRequest”,“消息”:“实体只允许使用JSON内容类型头进行写入。”,Lekker gewerkt pik