Sharepoint使用graph.microsoft.com测试版和php/cakephp上载文件内容
因此,经过一段时间的努力,我现在可以通过graph.microsoft.com阅读sharepoint网站和列表了 我还可以读取驱动器,并通过REST调用go me!在teamsite中创建了一个文件夹和文件!。问题是,尽管我可以“创建文件”,并且它显示在my.sharepoint.com上,但它的内容长度为0 我用这个页面来引导我: 我用来创建文件的代码如下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
$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