Google drive api-文件已上传但未列出
我是 google drive api 的新手.我正在将文件从我的服务器上传到 google drive.
I am new to google drive api.. I am working on uploading files from my server to google drive.
在我的 gmail 帐户中,我有
In my gmail account I have
- 创建服务帐号,下载密钥并上传到服务器
- 提供对 Drive Api 和 SDK Api 的访问权限.
添加了一个控制器来与谷歌通信:
- created a Service Account, download keys and uploaded to server
- Provided access to Drive Api and SDK Api.
Added a Controller to communicate with google as:
set_include_path(get_include_path() . PATH_SEPARATOR . ROOT .DS. "vendors");
require_once('Google/Client/Google_Client.php');
require_once('Googl
e/Client/contrib/Google_DriveService.php');
e/Client/contrib/Google_DriveService.php');
define('CLIENT_ID','my_client_here....');
define('SERVICE_ACCOUNT_NAME','my_account_name here');
define('KEY_FILE',VENDORS.'Google/Client/key/privatekey.p12'); // what i was availed by google.
if(is_file(KEY_FILE)){
$client = new Google_Client();
$key = file_get_contents(KEY_FILE);
$client->setClientId(CLIENT_ID);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/drive'),
$key)
);
$service = new Google_DriveService($client);
$file = new Google_DriveFile();
$file->setTitle('Any sample file title');
$file->setDescription('An experiment to upload text file via server to server');
$file->setMimeType('text/plain');
$data = "Lorem ipsum is a dummy text";
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => 'text/plain',
));
print_r($createdFile);
现在这个输出如下:
[kind] => drive#file
[id] => 0B-NwgyCI2GQENkswOHVNcVl2aDQ
[etag] => "11QSOvUX6KZKZVB6nCB3GloLTJQ/MTM5MDU2MzUwNTU2OQ"
[selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ
[webContentLink] => https://docs.google.com/uc?id=0B-NwgyCI2GQENkswOHVNcVl2aDQ&export=download
[alternateLink] => https://docs.google.com/file/d/0B-NwgyCI2GQENkswOHVNcVl2aDQ/edit?usp=drivesdk
[iconLink] => https://ssl.gstatic.com/docs/doclist/images/icon_10_text_list.png
[title] => Any sample file title
[mimeType] => text/plain
[description] => An experiment to upload text file via server to server
[labels] => Array
(
[starred] =>
[hidden] =>
[trashed] =>
[restricted] =>
[viewed] => 1
)
[createdDate] => 2014-01-24T11:38:25.679Z
[modifiedDate] => 2014-01-24T11:38:25.569Z
[modifiedByMeDate] => 2014-01-24T11:38:25.569Z
[lastViewedByMeDate] => 2014-01-24T11:38:25.569Z
[parents] => Array
(
[0] => Array
(
[kind] => drive#parentReference
[id] => 0AONwgyCI2GQEUk9PVA
[selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ/parents/0AONwgyCI2GQEUk9PVA
[parentLink] => https://www.googleapis.com/drive/v2/files/0AONwgyCI2GQEUk9PVA
[isRoot] => 1
)
)
[downloadUrl] => https://doc-04-60-docs.googleusercontent.com/docs/securesc/lptjog45u94o44tbsu1586vcuinvv74h/mlvse3i90c59eb4q6ggg7d4c6v6q4hfd/1390557600000/03476129820556261866/03476129820556261866/0B-NwgyCI2GQENkswOHVNcVl2aDQ?h=16653014193614665626&e=download&gd=true
[userPermission] => Array
(
[kind] => drive#permission
[etag] => "11QSOvUX6KZKZVB6nCB3GloLTJQ/-HVXFUAxHplEpHWK6MSWEcIX7d8"
[id] => me
[selfLink] => https://www.googleapis.com/drive/v2/files/0B-NwgyCI2GQENkswOHVNcVl2aDQ/permissions/me
[role] => owner
[type] => user
)
[originalFilename] => Any sample file title
[fileExtension] =>
[md5Checksum] => 2c06987d6ae9cfcd7060c68f4356231a
[fileSize] => 31
[quotaBytesUsed] => 31
[ownerNames] => Array
(
[0] => sdsdsdswrwew@developer.myemail.com
)
[owners] => Array
(
[0] => Array
(
[kind] => drive#user
[displayName] => dsdadasd3@developer.myemail.com
[isAuthenticatedUser] => 1
[permissionId] => 03476129820556261866
)
)
[lastModifyingUserName] => 89989989889@developer.myemailid.com
[lastModifyingUser] => Array
(
[kind] => drive#user
[displayName] => my_display_name
[isAuthenticatedUser] => 1
[permissionId] => 03476129820556261866
)
[editable] => 1
[copyable] => 1
[writersCanShare] => 1
[shared] =>
[appDataContents] =>
.......
现在的主要问题是通过此上传的文件未在我的 google 驱动器文件列表中列出,但如果我在我的帐户中查询可用文件,我只会得到通过此 api 上传的文件列表,而不是我创建的文件列表在 google drive 界面中手动操作.
Now the main problem is that the files upload via this is not listing in my google drive files list but if I query for the availale files in my account I get only the file list uploaded via this api and not the one I created manually in the google drive interface.
查看我的代码以获取文件列表..
See my code to get file list..
.....................
$client = new Google_Client();
$key = file_get_contents(KEY_FILE);
$client->setClientId(CLIENT_ID);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/drive'),
$key)
);
$service = new Google_DriveService($client);
....................
$files = $service->files->listFiles();
现在的问题:
- 为什么我的谷歌驱动器列表中没有列出文件.
- 为什么我在 google 控制台中创建的服务帐户被视为不同的用户.例如,文件列表与原始用户不同,原始用户文件未在 api 列出的文件中列出.
请让我知道我在哪里做错了,也让我知道我想要实现的目标是否可行.我创建了一个服务帐户而不是 Web 应用程序的客户端 ID
,因为该脚本将在没有任何用户界面的情况下自动运行.
Please let me know where I am doing wrong, also let me know if what I am trying to achieve is possible or not. I have created a Service Account rather than Client ID for web application
because the script will run automatically without any user interface.
请推荐....
推荐答案
为什么我的 google 驱动器列表中没有列出文件?
因为它们不属于你.它们属于服务帐号.
Because they don't belong to you. They belong to the service account.
为什么我在 google 控制台中创建的服务帐户被视为不同的用户.
因为那是一个服务帐户,即.它是自己的用户.
Because that is what a service account, ie. it's own user.
如果您希望上传的文件包含在您自己的云端硬盘内容中,那么您需要使用自己的帐户凭据访问云端硬盘 SDK.这不需要涉及用户交互.您只需获取一次刷新令牌,然后使用该令牌为 Drive 生成访问令牌.
If you want uploaded files to be in your own Drive contents, then you need to use your own account credentials to the Drive SDK. This does not need to involve user interaction. You simply need to acquire a refresh token one time, then use that subsequently to generate the access token for Drive.
相关文章