通过PHP下载Google云存储文件

时间:2016-04-26 08:34:56

标签: php google-cloud-storage google-api-php-client

我对Google云端存储完全陌生(因为到目前为止我使用的是亚马逊S3)。

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

我上传了一个名为" test.jpg "的测试文件到我的桶" test-bucket-46856 "我想通过签名网址下载(这样用户只能有时间限制访问),但我不知道如何开始这个。

请帮忙。感谢。

1 个答案:

答案 0 :(得分:-1)

<强> //编辑:

找到了完美的解决方案。这里是所有其他人也在搜索此解决方案的链接: 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();
}