10

新しい Google ドライブ API クライアント ライブラリのドキュメントに重大な問題があります。これは、stackoverflow に載せなくても簡単に答えられるはずです。私は真剣にこれに自分自身を転がすことを考えています.64ページのライブラリは「うまく機能する」が、これまでのところ「完全な頭痛の種」です.

uploadType をデフォルトの「シンプル」ではなく「再開可能」に設定するにはどうすればよいでしょうか。これを行う方法をライブラリで検索しましたが、存在しないようです。唯一のヒントは、サンプル アップローダー ページのコードですhttps://developers.google.com/drive/quickstart-php

//Insert a file
$file = new Google_DriveFile();
$file->setTitle('My document');
$file->setDescription('A test document');
$file->setMimeType('text/plain');

$data = file_get_contents('document.txt');

$createdFile = $service->files->insert($file, array(
      'data' => $data,
      'mimeType' => 'text/plain',
    ));

ここでは、uploadType を設定するものはありません...???

別のページのドキュメントでは、 uploadTypeがアドレスの一部として GET として表示されます: https://www.googleapis.com/upload/drive/v2/files?uploadType=resumableですが、を使用する$service->files->insertと、ライブラリがアドレスを設定します。

4

2 に答える 2

6

次のサンプルは、最新バージョンの Google API PHP クライアント ( https://code.google.com/p/google-api-php-client/source/checkout )で動作します。

if ($client->getAccessToken()) {
  $filePath = "path/to/foo.txt";
  $chunkSizeBytes = 1 * 1024 * 1024;

  $file = new Google_DriveFile();
  $file->setTitle('My document');
  $file->setDescription('A test document');
  $file->setMimeType('text/plain');

  $media = new Google_MediaFileUpload('text/plain', null, true, $chunkSizeBytes);
  $media->setFileSize(filesize($filePath));

  $result = $service->files->insert($file, array('mediaUpload' => $media));

  $status = false;
  $handle = fopen($filePath, "rb");
  while (!$status && !feof($handle)) {
    $chunk = fread($handle, $chunkSizeBytes);
    $uploadStatus = $media->nextChunk($result, $chunk);
  }

  fclose($handle);
}
于 2013-02-04T19:20:00.533 に答える
6

これは新しいリファレンスかもしれませんが、この質問に対する Google の公式見解は次のとおりです: https://developers.google.com/api-client-library/php/guide/media_upload

記事から:

再開可能なファイルのアップロード

アップロードを複数のリクエストに分割することもできます。これは大きなファイルの場合に便利で、問題が発生した場合にアップロードを再開できます。再開可能なアップロードは、別のメタデータで送信できます。

$file = new Google_Service_Drive_DriveFile();
$file->title = "Big File";
$chunkSizeBytes = 1 * 1024 * 1024;

// Call the API with the media upload, defer so it doesn't immediately return.
$client->setDefer(true);
$request = $service->files->insert($file);

// Create a media file upload to represent our upload process.
$media = new Google_Http_MediaFileUpload(
  $client,
  $request,
  'text/plain',
  null,
  true,
  $chunkSizeBytes
);
$media->setFileSize(filesize("path/to/file"));

// Upload the various chunks. $status will be false until the process is
// complete.
$status = false;
$handle = fopen("path/to/file", "rb");
while (!$status && !feof($handle)) {
  $chunk = fread($handle, $chunkSizeBytes);
  $status = $media->nextChunk($chunk);
 }

// The final value of $status will be the data from the API for the object
// that has been uploaded.
$result = false;
if($status != false) {
  $result = $status;
}

fclose($handle);
// Reset to the client to execute requests immediately in the future.
$client->setDefer(false);
于 2014-07-08T17:38:13.050 に答える