在V1中,我可以

$this->graph->createRequest('GET', '/drives/' . $driveId . '/items/' . $itemId . '/content')->download($path);

在V2中如何做到这一点?

我认为这已经很接近了,但我想不出如何在$Response中写入文件.

$tokenRequestContext = new \Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext(
    config('graphapi.azure_tenant_id'),
    config('graphapi.azure_client_id'),
    config('graphapi.azure_client_secret')
);

$graphServiceClient = new \Microsoft\Graph\GraphServiceClient($tokenRequestContext);

$response  = $graphServiceClient->drives()
    ->byDriveId(config('graphapi.attachments_drive_id'))
    ->items()
    ->byDriveItemId(<drive_item_id>)
    ->content()
    ->get();

编辑:

$Response返回promise :

object(Http\Promise\FulfilledPromise)#5993 (1) {
  ["result":"Http\Promise\FulfilledPromise":private]=>
  object(GuzzleHttp\Psr7\Stream)#6066 (7) {
    ["stream":"GuzzleHttp\Psr7\Stream":private]=>
    resource(965) of type (stream)
    ["size":"GuzzleHttp\Psr7\Stream":private]=>
    NULL
    ["seekable":"GuzzleHttp\Psr7\Stream":private]=>
    bool(true)
    ["readable":"GuzzleHttp\Psr7\Stream":private]=>
    bool(true)
    ["writable":"GuzzleHttp\Psr7\Stream":private]=>
    bool(true)
    ["uri":"GuzzleHttp\Psr7\Stream":private]=>
    string(10) "php://temp"
    ["customMetadata":"GuzzleHttp\Psr7\Stream":private]=>
    array(0) {
    }
  }
}

因此,我将代码更改为:

$promise  = $graphServiceClient->drives()
    ->byDriveId(config('graphapi.attachments_drive_id'))
    ->items()
    ->byDriveItemId(<drive_item_id>)
    ->content()
    ->get();

$promise->then(
    function ($response) {
        $fileContent = $response->getBody()->getContents();
        file_put_contents('test.txt', $fileContent);
    },
    function ($exception) {
        echo "Error: " . $exception->getMessage();
    }
);

但我收到错误:对未定义的方法GuzzleHttp\Psr7\Stream::getBody()的错误调用.

推荐答案

对于任何遇到这种情况并试图使用PHPSDK的V2的人,这里有一个解决方案.

$tokenRequestContext = new \Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext(
    config('graphapi.azure_tenant_id'),
    config('graphapi.azure_client_id'),
    config('graphapi.azure_client_secret')
);

$graphServiceClient = new \Microsoft\Graph\GraphServiceClient($tokenRequestContext);

$stream = $graphServiceClient->drives()
    ->byDriveId(config('graphapi.attachments_drive_id'))
    ->items()
    ->byDriveItemId(<drive_item_id>)
    ->content()
    ->get()
    ->wait();

file_put_contents('/path/file_name.txt', $stream);

新doctor 来了:https://learn.microsoft.com/en-us/graph/api/overview?view=graph-rest-1.0

驱动器项目下载:https://learn.microsoft.com/en-us/graph/api/driveitem-get-content?view=graph-rest-1.0&tabs=php#request

Php相关问答推荐

Symfony Api平台:按自定义实体方式排序结果

在Google云存储对象上从PHP设置缓存控制TTL会更改错误的元数据

让所有具有相同名称的产品在WooCommerce中更改价格

从订单项目中获取ACF WooCommerce产品价值

莫德克斯.当我try 使用pThumb为手机压缩图像时,没有任何react

如何将LARAVEL模块路径和项目路径合并,因为当我使用模块路径时,它们会覆盖项目路径

根据WooCommerce中的自定义用户元数据值更改用户角色

WooCommerce产品页面上没有产品详细信息

无法在 WordPress 上获取 JSON 数据

根据支付网关选项更改 WooCommerce Checkout 上的立即付款按钮文本

Google Drive API 服务->文件->get('root') 失败并显示找不到文件. (范围问题?)

获取 Shopware 6 集合元素的值,PHP

Laravel的Storage::exists返回false,而file_exists返回true.

适当的时区处理 Laravel / Carbon

Laravel Docker 几个数据库

Laravel 响应 html 默认页面忽略控制器

使用无限循环时 PHP 服务器发送事件错误 500

在 Laravel 中使用连接查询获取特定列的计数

我的 PHP/Mysql JSON 输出格式与 Flutter 应用所需的示例 JSON 页面格式不同

需要帮助解压缩 tmp 文件并将其重写到另一个路径