2014-03-02 40 views
1

我在我的Google云端商店中存在一些文件,我想要在我的网站上使用嵌入式和下载方式进行设置,但我似乎无法获取它们服务。在GAE PHP站点上从Google云端商店提供文件

我一直在寻找:https://developers.google.com/appengine/docs/php/refdocs/files/api.cloud_storage.CloudStorageTools# \谷歌\ AppEngine上\ API \ cloud_storage \ CloudStorageTools

的服务功能似乎并没有为我工作,或可能我不使用正确。

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

UPDATE:

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音频元素或制作下载链接?

UPDATE 2: This Works!

<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

CloudStorageTools::serve()是要做到这一点,有几个原因

  1. 这是更有效的正确的方式 - 当您使用CloudStorageTools ::服务()该文件由App Engine基础结构提供,因此不会发生读取实例中文件的成本。
  2. 您可以使用serve()返回任何大小的文件。使用file_get_contents()读取文件并回显,将您限制为32MB或更少的文件。

您可以看到我们的博文中用于生成dynamic sitemaps for WordPress的技术 - 在“创建请求处理程序”的标题下,本质上是代码。

选项1.

如果你想在文件中斗“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

您希望用户下载文件中的桶“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']); 
+0

这似乎并不为我工作......我甚至尝试设置'用'get_option()$ bucket';'函数像的例子。依然没有。 – Guy

+0

你是否更新上面返回的文件或不? –

+0

不,它不。变量('$ recording_data')没有设置,如果我使用'$ get_option();'该页面不加载。 – Guy

2

您可以访问存储在云端存储分区本身的文件,而不使用CloudStorageTools。

你将需要:

  1. 添加权限桶/为您的App Engine的文件Apps服务帐户例如[email protected]
  2. 创建的php.ini文件,并把在google_app_engine.allow_include_gs_buckets指令指定您要访问的桶(见https://developers.google.com/appengine/docs/php/config/php_ini#GAE_directives

  3. 终于可以然后只是:

包括:

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

或者读取文件的内容:

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