从Compute Engine PHP写入Google Cloud Storage

问题描述 投票:0回答:1

我希望能够通过Google Compute Engine实例将文件写入Google Cloud Storage。 通常,使用AppEngine时,google拥有自己的PHP StreamWrapper(位于AppEngine SDK中)。 但是,我不想从AppEngine编写,而是从ComputeEngine编写。

我试图使App Engine php sdk正常工作并“伪造” AppEngine上下文,但是事实证明这工作太多了。 然后,我尝试根据亚马逊的代码编写自己的StreamWrapper,但这被证明是一项繁重的任务,最终我放弃了。 不使用Google存储空间更容易,更便宜(在时间上)。

https://code.google.com/p/googleappengine/source/browse/#svn%2Ftrunk%2Fpython%2Fphp%2Fsdk%2Fgoogle%2Fappengine%2Fext%2Fcloud_storage_streams%253Fstate%253D关闭

亚马逊也有类似的StreamWrapper,不幸的是Google没有提供它。 https://github.com/aws/aws-sdk-php/blob/master/src/S3/StreamWrapper.php

是否有人对如何更好地做到这一点有任何想法? 我放弃写自己的书,因为我根本没有任何关于流的经验。 我在Google上搜索了很多不同的东西,但似乎没有任何东西适合我想要的东西。 也许有人可以帮忙?

google-api-php-client
1个回答
0
投票

这有两种方法:

  1. 使用gsutil实用程序( 文档 ),并确保已安装并通过身份验证。 然后从命令行使用gsutil命令之一:

    $ cmd =“ gsutil cp /foo/bar.txt gs:// mybucketnamehere”; shell_exec($ cmd);

  2. 使用此功能发送文件,我相信我是从另一个StackOverflow答案得到的:

    函数googStorageURL($ bucketName,$ file){$ expiry = time()+ 3600; //一小时身份验证$accessId='[email protected]'; $ stringPolicy =“ GET \\ n \\ n \\ n”。$ expiry。“ \\ n /".$ bucketName。” /“。$ file; $ priv_key =“ 123456789012345678901234567890abcdefghi”; // API访问公共密钥$ pkeyid = openssl_get_privatekey($ priv_key); 如果(openssl_sign($ stringPolicy,$ signature,$ pkeyid,'sha256')){$ signature = urlencode(base64_encode($ signature));
    返回'https://'.$bucketName.'.commondatastorage.googleapis.com/'.$file。'?GoogleAccessId ='。$ accessId。'&Expires ='。$ expiry。'&Signature ='。$ signature; }}

您可以通过在SSH上运行以下命令来获取$ accessId号(项目ID):

curl "http://metadata/computeMetadata/v1/instance/service-accounts/" -H "Metadata-Flavor: Google"

或通过登录开发人员控制台,导航至“存储”,“云存储”,“设置”,然后查看“ x-goog-project-id”。

我相信您还可以通过进入Cloud Storage下的“设置”,转到“互操作性”选项卡,“启用它”并创建一个密钥,然后按照文档将密钥传递到标题中来获得私有密钥。 查看更多

© www.soinside.com 2019 - 2024. All rights reserved.