使用Google Drive SDK上传的文件无法查看

时间:2014-08-14 08:05:53

标签: php google-drive-api

我创建了一个简单的PHP脚本来使用Google的Drive SDK。计划是最终我们将使用Google Drive作为我们部分网络内容的CDN形式(我们公司已经升级到1TB)。

代码在某种程度上起作用,因为它成功验证并上传文件。问题是,文件总是被破坏,无法使用Drive本身或通过下载查看。

代码相对简单,只需从维基百科中提取图像并尝试上传:

<?php

require_once 'Google/Client.php';
require_once 'Google/Service/Drive.php';
require_once 'Google/Service/Oauth2.php';

$client = new Google_Client();

//$client->setUseObjects(true);
//$client->setAuthClass('apiOAuth2');
$client->setScopes(array('https://www.googleapis.com/auth/drive.file'));
$client->setClientId('***');
$client->setClientSecret('***');
$client->setRedirectUri('***');
$client->setAccessToken(authenticate($client));

// initialise the Google Drive service
$service = new Google_Service_Drive($client);


$data = file_get_contents('http://upload.wikimedia.org/wikipedia/commons/3/38/JPEG_example_JPG_RIP_010.jpg');

// create and upload a new Google Drive file, including the data
try
{
    //Insert a file
    $file = new Google_Service_Drive_DriveFile($client);

    $file->setTitle(uniqid().'.jpg');
    $file->setMimeType('image/jpeg');

    $createdFile = $service->files->insert($file, array(
        'data' => $data,
        'mimeType' => 'image/jpeg',
    ));
}
catch (Exception $e)
{
    print $e->getMessage();
}

print_r($createdFile);

?>

print_r语句执行,我们获取有关该文件的信息。但是,正如我所提到的,该文件是不可见的,并且似乎已损坏。任何人都可以对这个问题有所了解吗?

2 个答案:

答案 0 :(得分:2)

在对文档进行更多挖掘(当前公共文档严重过时)后,我发现有必要将另一个参数作为insert()函数的body参数的一部分发送(函数调用中的第二个参数。)

使用以下内容:

$createdFile = $service->files->insert($doc, array(
    'data' => $content,
    'mimeType' => 'image/jpeg',
    'uploadType' => 'media',    // this is the new info
));

我能够让一切正常运转。我会在这里留下这个问题,因为我认为直到谷歌实际更新PHP API的文档才会非常有用。

Source info here

答案 1 :(得分:0)

您的代码似乎没问题。 您之后是否曾尝试从Google云端硬盘下载此文件并查看该文件? 我也知道它的abit很愚蠢,但是你试过在使用file_get_contents()之后立即在磁盘上写文件。你知道只是为了确定100%不好的地方。