Google 通过 PHP 下载云存储文件

Google Cloud Storage File Download via PHP

我对 Google 云存储完全陌生(因为我一直使用 Amazon S3 到现在)。

我想设置我的网络应用程序,以便用户可以直接从 Google 云存储下载文件。 我已经尝试过,使用 Google Api PHP Client,但没有得到功能代码。

我已将名为“test.jpg”的测试文件上传到我的存储桶“test-bucket-46856”我想通过签名 url 下载(这样用户只有时间限制访问),但我不知道如何开始。

请帮忙。谢谢

//编辑:

找到完美的解决方案。这里的 link 适用于也在搜索此解决方案的所有其他人: https://gist.github.com/stetic/c97c94a10f9c6b591883

<?php
/*
 * PHP Example for Google Storage Up- and Download 
 * with Google APIs Client Library for PHP:
 * https://github.com/google/google-api-php-client
 */

include( "Google/Client.php" );
include( "Google/Service/Storage.php" );

$serviceAccount     = "1234-xyz@developer.gserviceaccount.com";
$key_file       = "/path/to/keyfile.p12";
$bucket         = "my_bucket";
$file_name      = "test.txt";
$file_content       = "01101010 01110101 01110011 01110100 00100000 01100001 00100000 01110100 01100101 01110011 01110100";

$auth = new Google_Auth_AssertionCredentials(
                    $serviceAccount,
                    array('https://www.googleapis.com/auth/devstorage.read_write'),
                    file_get_contents($key_file)
                    );

$client = new Google_Client();
$client->setAssertionCredentials( $auth );
$storageService = new Google_Service_Storage( $client );

/***
 * Write file to Google Storage
 */

try 
{
    $postbody = array( 
            'name' => $file_name, 
            'data' => $file_content,
            'uploadType' => "media"
            );
    $gsso = new Google_Service_Storage_StorageObject();
    $gsso->setName( $file_name );
    $result = $storageService->objects->insert( $bucket, $gsso, $postbody );
    print_r($result);

}      
catch (Exception $e)
{
    print $e->getMessage();
}

/***
 * Read file from Google Storage
 */

try 
{
   $object = $storageService->objects->get( $bucket, $file_name );
   $request = new Google_Http_Request($object['mediaLink'], 'GET');
   $signed_request = $client->getAuth()->sign($request);
   $http_request = $client->getIo()->makeRequest($signed_request);
   echo $http_request->getResponseBody();
}      
catch (Exception $e)
{
    print $e->getMessage();
}