Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在google drive api的根目录中创建文件夹,并将文件上载到该文件夹_Php_Laravel_Google Drive Api_Google Api Php Client - Fatal编程技术网

Php 在google drive api的根目录中创建文件夹,并将文件上载到该文件夹

Php 在google drive api的根目录中创建文件夹,并将文件上载到该文件夹,php,laravel,google-drive-api,google-api-php-client,Php,Laravel,Google Drive Api,Google Api Php Client,我想使用CURL在googledrive根目录中创建文件夹。文件已上载到驱动器,但我需要创建一个文件夹并将文件上载到该文件夹 根据@hanshenrik代码,创建文件夹工作,移动文件不工作 我的更新代码: 这将帮助您: 创建文件夹: 在驱动器API中,文件夹本质上是一个文件,由特殊的文件夹MIME类型application/vnd.google-apps.folder标识。您可以通过插入具有此MIME类型和文件夹标题的文件来创建新文件夹。设置文件夹标题时不要包含扩展名 $fileMetadata

我想使用CURL在googledrive根目录中创建文件夹。文件已上载到驱动器,但我需要创建一个文件夹并将文件上载到该文件夹

根据@hanshenrik代码,创建文件夹工作,移动文件不工作

我的更新代码:

这将帮助您:

创建文件夹:

在驱动器API中,文件夹本质上是一个文件,由特殊的文件夹MIME类型application/vnd.google-apps.folder标识。您可以通过插入具有此MIME类型和文件夹标题的文件来创建新文件夹。设置文件夹标题时不要包含扩展名

$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Invoices',
    'mimeType' => 'application/vnd.google-apps.folder'));
$file = $driveService->files->create($fileMetadata, array(
    'fields' => 'id'));
printf("Folder ID: %s\n", $file->id);
在文件夹中插入文件:

要在特定文件夹中插入文件,请在文件的父属性中指定正确的ID,如图所示:

$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'photo.jpg',
    'parents' => array($folderId)
));
$content = file_get_contents('files/photo.jpg');
$file = $driveService->files->create($fileMetadata, array(
    'data' => $content,
    'mimeType' => 'image/jpeg',
    'uploadType' => 'multipart',
    'fields' => 'id'));
printf("File ID: %s\n", $file->id);
$fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$emptyFileMetadata = new Google_Service_Drive_DriveFile();
// Retrieve the existing parents to remove
$file = $driveService->files->get($fileId, array('fields' => 'parents'));
$previousParents = join(',', $file->parents);
// Move the file to the new folder
$file = $driveService->files->update($fileId, $emptyFileMetadata, array(
    'addParents' => $folderId,
    'removeParents' => $previousParents,
    'fields' => 'id, parents'));
创建文件夹时,也可以使用parents属性创建子文件夹

在文件夹之间移动文件: 要添加或删除现有文件的父级,请使用文件上的addParents和removeParents查询参数。方法

这两个参数都可用于将文件从一个文件夹移动到另一个文件夹,如图所示:

$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'photo.jpg',
    'parents' => array($folderId)
));
$content = file_get_contents('files/photo.jpg');
$file = $driveService->files->create($fileMetadata, array(
    'data' => $content,
    'mimeType' => 'image/jpeg',
    'uploadType' => 'multipart',
    'fields' => 'id'));
printf("File ID: %s\n", $file->id);
$fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$emptyFileMetadata = new Google_Service_Drive_DriveFile();
// Retrieve the existing parents to remove
$file = $driveService->files->get($fileId, array('fields' => 'parents'));
$previousParents = join(',', $file->parents);
// Move the file to the new folder
$file = $driveService->files->update($fileId, $emptyFileMetadata, array(
    'addParents' => $folderId,
    'removeParents' => $previousParents,
    'fields' => 'id, parents'));
这将帮助您:

创建文件夹:

在驱动器API中,文件夹本质上是一个文件,由特殊的文件夹MIME类型application/vnd.google-apps.folder标识。您可以通过插入具有此MIME类型和文件夹标题的文件来创建新文件夹。设置文件夹标题时不要包含扩展名

$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Invoices',
    'mimeType' => 'application/vnd.google-apps.folder'));
$file = $driveService->files->create($fileMetadata, array(
    'fields' => 'id'));
printf("Folder ID: %s\n", $file->id);
在文件夹中插入文件:

要在特定文件夹中插入文件,请在文件的父属性中指定正确的ID,如图所示:

$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'photo.jpg',
    'parents' => array($folderId)
));
$content = file_get_contents('files/photo.jpg');
$file = $driveService->files->create($fileMetadata, array(
    'data' => $content,
    'mimeType' => 'image/jpeg',
    'uploadType' => 'multipart',
    'fields' => 'id'));
printf("File ID: %s\n", $file->id);
$fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$emptyFileMetadata = new Google_Service_Drive_DriveFile();
// Retrieve the existing parents to remove
$file = $driveService->files->get($fileId, array('fields' => 'parents'));
$previousParents = join(',', $file->parents);
// Move the file to the new folder
$file = $driveService->files->update($fileId, $emptyFileMetadata, array(
    'addParents' => $folderId,
    'removeParents' => $previousParents,
    'fields' => 'id, parents'));
创建文件夹时,也可以使用parents属性创建子文件夹

在文件夹之间移动文件: 要添加或删除现有文件的父级,请使用文件上的addParents和removeParents查询参数。方法

这两个参数都可用于将文件从一个文件夹移动到另一个文件夹,如图所示:

$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'photo.jpg',
    'parents' => array($folderId)
));
$content = file_get_contents('files/photo.jpg');
$file = $driveService->files->create($fileMetadata, array(
    'data' => $content,
    'mimeType' => 'image/jpeg',
    'uploadType' => 'multipart',
    'fields' => 'id'));
printf("File ID: %s\n", $file->id);
$fileId = '1sTWaJ_j7PkjzaBWtNc3IzovK5hQf21FbOw9yLeeLPNQ';
$folderId = '0BwwA4oUTeiV1TGRPeTVjaWRDY1E';
$emptyFileMetadata = new Google_Service_Drive_DriveFile();
// Retrieve the existing parents to remove
$file = $driveService->files->get($fileId, array('fields' => 'parents'));
$previousParents = join(',', $file->parents);
// Move the file to the new folder
$file = $driveService->files->update($fileId, $emptyFileMetadata, array(
    'addParents' => $folderId,
    'removeParents' => $previousParents,
    'fields' => 'id, parents'));

看看这个是否有效。我做了一些更改,比如name=>,CURLOPT_CUSTOMREQUEST=>“POST”


看看这个是否有效。我做了一些更改,比如name=>,CURLOPT_CUSTOMREQUEST=>“POST”


查看这里有关文件夹的文档,您似乎是通过上传一个内容类型设置为application/vnd.google-apps.folder的空文件来创建文件夹的

以下是有关如何以简单方式上载文件的文档:

上载方法的问题是创建的文件或文件夹没有名称,只会被称为“无标题”,所以最后,这里是关于如何重命名文件的文档:或者在本例中是文件夹

把这些放在一起,你可能会得到如下结果:

<?php
$ch = curl_init ();
curl_setopt_array ( $ch, array (
        CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files?uploadType=media',
        CURLOPT_HTTPHEADER => array (
                'Content-Type: application/vnd.google-apps.folder',
                'Authorization: Bearer '.getAccessToken ( $credentials )  
        ),
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => '', // "empty file"
        CURLOPT_RETURNTRANSFER => 1 
) );
try {
    // this will create the folder, with no name
    if (false === ($resp = curl_exec ( $ch ))) {
        throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) );
    }
    $parsed = json_decode ( $resp, true );
    if (! $parsed || $parsed ['code'] !== 200) {
        throw new \RuntimeException ( 'google api error: ' . $resp );
    }
    $id = $parsed ['id'];
    // now to give the folder a name:
    curl_setopt_array ( $ch, array (
            CURLOPT_URL => 'https://www.googleapis.com/drive/v3/files/' . urlencode ( $id ),
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => json_encode ( array (
                    'name' => 'the_folders_name' 
            ) ),
            CURLOPT_CUSTOMREQUEST => 'PATCH',
            CURLOPT_HTTPHEADER => array (
                    'Content-Type : application/json',
                    'Authorization: Bearer ' . getAccessToken ( $credentials ) 
            ) 

    ) );

    if (false === ($resp = curl_exec ( $ch ))) {
        throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) );
    }
    $parsed = json_decode ( $resp, true );
    if (! $parsed || $parsed ['code'] !== 200) {
        throw new \RuntimeException ( 'google api error: ' . $resp );
    }
} finally{
    curl_close ( $ch );
}
var_dump ( $resp );
<?php
try {
    $ch = curl_init ();
    curl_setopt_array ( $ch, array (
            CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files/' . urlencode ( $file_id ),
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => json_encode ( array (
                    'addParents' => $folder_id,
                    'removeParents'=> 'root',


            ) ),
            CURLOPT_CUSTOMREQUEST => 'PATCH',
            CURLOPT_HTTPHEADER => array (
                    'Content-Type : application/json',
                    'Authorization: Bearer ' . getAccessToken ( $credentials ) 
            ) 

    ) );
    if (false === ($resp = curl_exec ( $ch ))) {
        throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) );
    }
    $parsed = json_decode ( $resp, true );
    if (! $parsed || $parsed ['code'] !== 200) {
        throw new \RuntimeException ( 'google api error: ' . $resp );
    }
} finally{
    curl_close ( $ch );
}

查看这里有关文件夹的文档,您似乎是通过上传一个内容类型设置为application/vnd.google-apps.folder的空文件来创建文件夹的

以下是有关如何以简单方式上载文件的文档:

上载方法的问题是创建的文件或文件夹没有名称,只会被称为“无标题”,所以最后,这里是关于如何重命名文件的文档:或者在本例中是文件夹

把这些放在一起,你可能会得到如下结果:

<?php
$ch = curl_init ();
curl_setopt_array ( $ch, array (
        CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files?uploadType=media',
        CURLOPT_HTTPHEADER => array (
                'Content-Type: application/vnd.google-apps.folder',
                'Authorization: Bearer '.getAccessToken ( $credentials )  
        ),
        CURLOPT_POST => 1,
        CURLOPT_POSTFIELDS => '', // "empty file"
        CURLOPT_RETURNTRANSFER => 1 
) );
try {
    // this will create the folder, with no name
    if (false === ($resp = curl_exec ( $ch ))) {
        throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) );
    }
    $parsed = json_decode ( $resp, true );
    if (! $parsed || $parsed ['code'] !== 200) {
        throw new \RuntimeException ( 'google api error: ' . $resp );
    }
    $id = $parsed ['id'];
    // now to give the folder a name:
    curl_setopt_array ( $ch, array (
            CURLOPT_URL => 'https://www.googleapis.com/drive/v3/files/' . urlencode ( $id ),
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => json_encode ( array (
                    'name' => 'the_folders_name' 
            ) ),
            CURLOPT_CUSTOMREQUEST => 'PATCH',
            CURLOPT_HTTPHEADER => array (
                    'Content-Type : application/json',
                    'Authorization: Bearer ' . getAccessToken ( $credentials ) 
            ) 

    ) );

    if (false === ($resp = curl_exec ( $ch ))) {
        throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) );
    }
    $parsed = json_decode ( $resp, true );
    if (! $parsed || $parsed ['code'] !== 200) {
        throw new \RuntimeException ( 'google api error: ' . $resp );
    }
} finally{
    curl_close ( $ch );
}
var_dump ( $resp );
<?php
try {
    $ch = curl_init ();
    curl_setopt_array ( $ch, array (
            CURLOPT_URL => 'https://www.googleapis.com/upload/drive/v3/files/' . urlencode ( $file_id ),
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => json_encode ( array (
                    'addParents' => $folder_id,
                    'removeParents'=> 'root',


            ) ),
            CURLOPT_CUSTOMREQUEST => 'PATCH',
            CURLOPT_HTTPHEADER => array (
                    'Content-Type : application/json',
                    'Authorization: Bearer ' . getAccessToken ( $credentials ) 
            ) 

    ) );
    if (false === ($resp = curl_exec ( $ch ))) {
        throw new \RuntimeException ( 'curl error ' . curl_errno ( $ch ) . ": " . curl_error ( $ch ) );
    }
    $parsed = json_decode ( $resp, true );
    if (! $parsed || $parsed ['code'] !== 200) {
        throw new \RuntimeException ( 'google api error: ' . $resp );
    }
} finally{
    curl_close ( $ch );
}

这是我的工作示例:

要连接Google驱动程序:

发送到谷歌硬盘

请求的客户:

在谷歌驱动器中搜索

在Google Drive上创建文件夹

在Google Drive上创建文档:


我的型号是Copywriter,内容将替换为您的。

这是我的工作示例:

要连接Google驱动程序:

发送到谷歌硬盘

请求的客户:

在谷歌驱动器中搜索

在Google Drive上创建文件夹

在Google Drive上创建文档:


My Models是Copywriter,Content将其替换为您的。

首先创建文件夹,然后在上载文件时获取id,您可以在parents参数中传递id。否,不是这样的。我需要在roots中创建一个文件夹。创建文件夹时不要传递parents参数。使您的请求与您希望发送的请求不同的错误在于您没有将{id:0ADK06pfg}放入数字索引数组中。parents=>array 0=>arrayid=>0ADoIbPC84gk7Uk9PVA可以解决这个问题。当json_encode遇到一个数字索引数组时,它将创建一个json数组,但当它遇到一个非数字索引数组时,它将创建一个json objectFirst create文件夹,并在上传文件时获取id,您可以在parents参数中传递id。否,不是这样的。我需要在roots中创建一个文件夹。创建文件夹时不要传递parents参数。使您的请求与您希望发送的请求不同的错误在于您没有将{id:0ADK06pfg}放入数字索引数组中。parents=>array 0=>arrayid=>0ADoIbPC84gk7Uk9PVA可以解决这个问题。什么时候
json_encode遇到一个数字索引数组,它将创建一个json数组,但当它遇到一个没有数字索引的数组时,它将创建一个json对象。我已经添加了完整的文件。我没有从你的问题中得到任何信息。同样的代码也适用于我。我可以知道您在哪里调用SE方法以及客户端实现在哪里吗?在localhost中,我创建了一个程序。我添加了完整的文件。我没有从您的问题中得到任何信息。同样的代码也适用于我。我可以知道您在哪里调用SE方法以及客户端实现在哪里吗?在localhost中,我创建了一个程序。它也是添加文件吗?@VasimVanzara抱歉,忘了这一点,现在我更新了我的答案,添加了一个关于如何在文件夹中移动文件的部分。不,我的意思是上载到该文件夹/这是用于move@VasimVanzara你可以在上传文件后立即将其移动到文件夹中。您甚至可以在相同的请求中执行此操作,即为文件命名,json_encodearrayname=>filename.pdf,addParents=>folder_id,removeParents=>rootIt也是添加文件吗?@VasimVanzara抱歉,忘了这一点,现在我更新了我的答案,添加了一个关于如何在文件夹中移动文件的部分。不,我的意思是上载到该文件夹/这是用于move@VasimVanzara你可以在上传文件后立即将其移动到文件夹中。您甚至可以在相同的请求中执行此操作,即为文件指定一个名称,json\u encodearrayname=>filename.pdf,addParents=>folder\u id,removeParents=>root