在GAE PHP网站上提供来自Google Cloud Store的文件

时间:2014-03-02 14:15:25

标签: php google-app-engine

我的Google云端商店中有文件要嵌入并在我的网站上下载,并使用GAE和PHP设置,但我似乎无法让它们服务。

我一直在关注:https://developers.google.com/appengine/docs/php/refdocs/files/api.cloud_storage.CloudStorageTools# \ google \ appengine \ api \ cloud_storage \ CloudStorageTools

发球功能对我来说似乎不起作用,或者我可能没有正确使用它。

我不应该只是serve($gs_filename);抓取文件吗?任何帮助,将不胜感激!感谢。

更新:

require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';
use google\appengine\api\cloud_storage\CloudStorageTools;

$bucket = 'raven-bucket';
$recording_name = '/194-14-02-2014rec.ogg';
$recording_data = CloudStorageTools::serve('gs://'.$bucket.$recording_name, ['content_type' => 'audio/ogg']);

这是我到目前为止所做的,但我不确定serve();实际上是什么回归。我如何将此音频文件嵌入HTML 5音频元素或制作下载链接?

更新2: 这有效!

<audio controls>
    <source src="test.php" type="audio/ogg">
</audio>

test.php的:

<?php

require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';
use google\appengine\api\cloud_storage\CloudStorageTools;
CloudStorageTools::serve('gs://raven-bucket/194-14-02-2014rec.ogg', 
    ['content_type' => 'audio/ogg']);

2 个答案:

答案 0 :(得分:2)

您可以本机访问存储在云存储桶中的文件,而无需使用CloudStorageTools。

您需要:

  1. 为App Engine应用服务帐户的存储桶/文件添加权限,例如your-app@appspot.gserviceaccount.com
  2. 创建 php.ini 文件并输入 google_app_engine.allow_include_gs_buckets 指令,指定您要访问的存储区(请参阅https://developers.google.com/appengine/docs/php/config/php_ini#GAE_directives)< / p>

  3. 最后你可以:

  4. 包括:

    <? include("gs://your-bucket/file.php"); ?>
    

    或阅读文件内容:

    <? $content = file_get_contents("gs://your-bucket/file.txt"); ?>
    

答案 1 :(得分:2)

CloudStorageTools::serve()是执行此操作的正确方法,原因有几个

  1. 效率更高 - 当您使用CloudStorageTools :: serve()时,文件由App Engine基础架构提供服务,因此您不会在实例中读取文件的成本。
  2. 您可以使用serve()返回任意大小的文件。使用file_get_contents()读取文件并使用echo来限制您使用32MB或更少的文件。
  3. 您可以在我们的博文中看到用于生成dynamic sitemaps for WordPress的技术 - 在“创建请求处理程序”标题下,代码基本上是。

    选项1。

    如果你想在桶'raven-bucket'中返回文件'194-14-02-2014rec.ogg'作为对请求的响应,那么你的php脚本就好了。

    <?php
    
    use google\appengine\api\cloud_storage\CloudStorageTools;
    CloudStorageTools::serve('gs://raven-bucket/194-14-02-2014rec.ogg', 
                             ['content_type' => 'audio/ogg']);
    

    选项2。

    您希望用户在存储桶'raven-bucket'中下载文件'194-14-02-2014rec.ogg',以便将其保存在本地计算机上。

    <?php
    
    use google\appengine\api\cloud_storage\CloudStorageTools;
    CloudStorageTools::serve('gs://raven-bucket/194-14-02-2014rec.ogg', 
                             ['save_as' => '194-14-02-2014rec.ogg', 
                              'content_type' => 'audio/ogg']);