代码之家  ›  专栏  ›  技术社区  ›  sipher_z

包含哈希(#)的文件名未上载

  •  1
  • sipher_z  · 技术社区  · 6 年前

    $uri = "/me/drive/items/$folderId/children('{$fileName}')/content";
    
    $graph = $this->graph->create($user);
    $client = $this->graph->createClient();
    
    $item = $graph->createRequest("PUT", $uri)
        ->attachBody($fileContent)
        ->setReturnType(Model\DriveItem::class)
        ->execute($client);
    

    如果$fileName类似于Test.doc,那么这个方法非常有效

    但是由于某种原因,当文件名中有一个散列(#)时,我会得到一个错误:

    object(Microsoft\Graph\Model\DriveItem)#1509 (1) {
      ["_propDict":protected]=>
      array(1) {
        ["error"]=>
        array(3) {
          ["code"]=>
          string(10) "BadRequest"
          ["message"]=>
          string(36) "Bad Request - Error in query syntax."
          ["innerError"]=>
          array(2) {
            ["request-id"]=>
            string(36) "ff3fe15f-b1ee-4e92-8abd-2400b1c1b5cf"
             ["date"]=>
             string(19) "2018-10-04T14:30:51"
           }
        }
      }
    

    有人能否澄清这是一个bug还是实际行为(即文件名中不能有#)

    谢谢

    2 回复  |  直到 6 年前
        1
  •  2
  •   Vadim Gremyachev    6 年前

    我猜你在利用 Microsoft Graph Library for PHP ,特殊字符,如 # 需要逃走。

    所以,要么用 %23 ( percent encoding )或使用 rawurlencode function 如下图所示:

        $fileName = rawurlencode("Guide#.docx");
    
        $requestUrl = "https://graph.microsoft.com/v1.0/drives/$driveId/root:/$fileName:/content";
    
        try {
            $item = $client->createRequest("PUT", $requestUrl)
                ->attachBody($fileContent)
                ->setReturnType(Model\DriveItem::class)
                ->execute();
    
        } catch (\Microsoft\Graph\Exception\GraphException $ex) {
            print $ex;
        }
    
        2
  •  0
  •   Seiya Su    6 年前

    # in name enter image description here

    SharePoint dev中存在相关问题 issue list exising feature 或者在UserVoice上提交一个新的。

    推荐文章