【问题标题】:google-api-php-client - Drive - File Insert - Create a text file - Content not being addedgoogle-api-php-client - 驱动器 - 文件插入 - 创建文本文件 - 未添加内容
【发布时间】:2015-06-12 16:46:31
【问题描述】:

我想在 Google App Engine 上使用 PHP 和用于 Google Drive 的 Google-API 创建一个 plain/text Mime 类型文件。

当我使用时:

'mimeType' => 'text/plain',

没有内容写入文件。

如果我使用:

'mimeType' => 'application/octet-stream',
'uploadType' => 'media'

内容被添加到文件中。

此代码来自Google documentation

显示 'text/plain' 的 mimeType 的一行代码

'mimeType' => 'text/plain',

但是,同样,如果我使用它,文件中不会添加任何内容。创建纯文本文件和添加内容的设置是什么?

我的完整代码是这样的:

<?php
/* You can NOT see the files created in a Service Account without doing some special stuff.  You need to set some kind
of permissions, and then you can see the files in your SHARED WITH ME section of Google Drive 
http://stackoverflow.com/questions/25302794/google-drive-api-services-account-view-uploaded-files-to-google-drive-using-java*/
session_start();

require_once realpath(dirname(__FILE__) . '/google-api-php-client/src/Google/autoload.php');

$client_id = 'your Client ID'; //Client ID
$service_account_name = 'account name'; //Email Address
$key_file_location = 'fileName.p12'; //key.p12

$theDateTime = date("Y-m-d h:i:sa");
echo "indexService - " . $theDateTime . '<br>';

$client = new Google_Client();
$client->setClientId($client_id);

//$client->addScope("https://www.googleapis.com/service/drive");
$service = new Google_Service_Drive($client);

if (isset($_SESSION['service_token'])) {
  $client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
//echo '$key: ' . $key. '<br>';

$cred = new Google_Auth_AssertionCredentials(
    $service_account_name,
    array('https://www.googleapis.com/auth/drive'),
    $key
);

$client->setAssertionCredentials($cred);

if ($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

//Begin of code that is same for both service and web

//  If signed in, upload
if ($client->getAccessToken()) {
  echo 'Got access token <br>';

  $fileData = "This is the file Content: " . $theDateTime;
  $fileName = 'User123_Date';
  echo '$fileName: ' . $fileName . '<br>';
  echo '$fileData: ' . $fileData . '<br>';

  //Upload file with metadata
  $file = new Google_Service_Drive_DriveFile();
  $file->setTitle($fileName);
  $result2 = $service->files->insert(
      $file,
      array(
        'data' => $fileData,
        'mimeType' => 'application/octet-stream',
        'uploadType' => 'media'
      )
  );

  $theId = $result2->getId();
  $downloadUrl = $result2->getDownloadUrl();
  echo 'the ID: ' . $theId . '<br>';
  echo "Title: " . $result2->getTitle() . '<br>';
  echo "MIME type: " . $result2->getMimeType() . '<br>';
  echo '$downloadUrl: ' . $downloadUrl . '<br>';

  // get the file info as a check
    try {
      echo 'try part <br>';
      $result3 = $service->files->get($theId);
      echo "Title: " . $result3->getTitle() . '<br>';
      //echo "Description: " . $result3->getDescription() . '<br>';
      echo "MIME type: " . $result3->getMimeType() . '<br>';
    } catch (Exception $e) {
      echo "An error occurred: " . $e->getMessage() . '<br>';
    };

   if ($downloadUrl) {
     echo 'there is a download url <br>';

    $request = new Google_Http_Request($downloadUrl, 'GET', null, null);
    $httpRequest = $service->getClient()->getAuth()->authenticatedRequest($request);
    if ($httpRequest->getResponseHttpCode() == 200) {
      $theContentIs = $httpRequest->getResponseBody();
      echo '$theContentIs: ' . $theContentIs . '<br>';
    } else {
      // An error occurred.
      echo 'an error occurred getting file contents <br>';
    }
  } else {
    // The file doesn't have any content stored on Drive.
    echo 'The file doesnt have any content stored on Drive. <br>';
  }
}

echo "File Upload - Uploading a small file".'<br>';
?>

<?php
echo 'end of code';

【问题讨论】:

    标签: php file mime-types google-api-php-client


    【解决方案1】:

    如果您想要一个具有该 MimeType 的文本文件,请通过 PHP 而不是直接在 Drive 上创建它。这就是为什么那个 mimetype 没有被识别的原因。 fopen() 可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 2013-04-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多