6

私はGoogleクラウドストレージに非常に慣れていません。

PHPコーディングを使用してバケットにフォルダを作成したい。私はかなりの数のサイトを検索しましたが、1 でそれが書かれているのを見ました:

「バケット内にフォルダを作成すると、ディレクトリにちなんで名付けられたプレースホルダ オブジェクトが作成され、データ コンテンツがなく、MIME タイプが application/x-directory になります。Google Storage Manager で作成されたディレクトリ プレースホルダ オブジェクトはサポートされていません。」

何を言おうとしているのか理解できませんでした。フォルダを作成する方法を教えてください。次のコードを使用してみました:

$req = new Google_HttpRequest("http://commondatastorage.googleapis.com/bucket/myfoldertrial");
$req->setRequestHeaders(array(
'x-goog-project-id' => 21212,
'x-goog-acl' => 'public-read',
'Content-Type' => 'application/x-directory'
));
$req->setRequestMethod('PUT');
$req->setPostBody('myfoldertrial');

次のリンクの API を使用しています。

PHP 用 Google API

PHPを使用してフォルダを作成するのを手伝ってください。

4

3 に答える 3

12

おそらく、実際にフォルダーを作成する必要はありません。

Google ストレージは、オペレーティング システムのファイル システムが使用するようなツリー構造ではなく、すべてのオブジェクトが最上位のバケットに格納されます。ただし、オブジェクトにスラッシュを含む名前を付けることができるため、フォルダー内にあるように見えUsers/username/docs/2012/09/21/activity.csvます。これは、オブジェクトに完全に適した名前であり、サポートするフォルダーは必要ありません。

この種のスキームを備えたオブジェクトを配置したら、これらの docsに従ってパラメーターdelimiterとパラメーターを使用してフォルダーの内容を表示しているかのようにそれらを一覧表示できます。prefix

そのため、そこにmyfoldertrialアップロードできるように作成するだけexample.pngの場合は、フォルダを作成する必要はなく、直接 にアップロードできますmyfoldertrial/example.png

于 2012-09-21T09:59:52.677 に答える
2

CMS では、ファイルをアップロードする前にまずディレクトリを作成する必要がある場合があります。これにより、マウス クリックでイベントがトリガーされ、ベース フォルダとしてパスが取得され、バッチ アップロードが実行されます。

それはファイルブラウザだと彼らは言います。

以下のこのコードが役立つかもしれません。

<?php

$privateKeyFile = '{{full/path/to/*.p12}}';
$newDirectory = '{{path/of/new/directory/}}'; // remember to end it with a slash.

/**
 * Authentication
 */
$client = new Google_Client();
$client->setApplicationName('Create a new folder');
$client->setClientId($clientId);
$scopes = array('https://www.googleapis.com/auth/devstorage.full_control');
$client->setScopes($scopes);
$service = new Google_Service_Storage($client);

if (isset($_SESSION['service_token'])) {
    $client->setAccessToken($_SESSION['service_token']);
}
if (!file_exists($privateKeyFile)) {
    die('missing the location of primary key file, given: ' . $privateKeyFile);
}
$key = file_get_contents($privateKeyFile);
$cred = new Google_Auth_AssertionCredentials(
        $clientEmailAddress
        , $scopes
        , $key
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

/**
 * Creating Folder
 */
try {
    /* create empty file that acts as folder */
    $postBody = new Google_Service_Storage_StorageObject();
    $postBody->setName($newDirectory);
    $postBody->setSize(0);

    $created = $service->objects->insert($bucketName, $postBody, array(
        'name' => $newDirectory,
        'uploadType' => 'media',
        'projection' => 'full',
        'data' => '',
    ));
} catch (Exception $ex) {
    echo $ex->getMessage() . "\n<pre>";
    print_r($ex->getTraceAsString());
    echo '</pre>';
    die();
}

echo 'EOF';
于 2015-01-19T11:37:59.317 に答える