Appengine Cloud Storage上传图像并存储在存储中

时间:2014-10-15 00:25:28

标签: php angularjs google-app-engine yii google-cloud-storage

我有问题。欢迎任何帮助。

我正在开发一个需要使用谷歌apis的解决方案,如云存储,云端硬盘等。

在clasic个人资料页面中,我必须上传图片个人资料。然后我使用angularjs将数据发布到我的appengine / php / yii

formPHP:

`

<?php
require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';
use google\appengine\api\cloud_storage\CloudStorageTools;
$options = [ 'gs_bucket_name' => 'seektrabajo' ];
$upload_url = CloudStorageTools::createUploadUrl('/perfiles/subirFotoPerfil', $options);
?>
<input type="file" name="file" 
       nv-file-select="uploader.uploadAll()" 
       uploader="uploader"   />

`

当提交发送数据到谷歌和谷歌到yii ajax服务时:

`

public function actionSubirFotoPerfil(){
     $answer = array('answer'=>'Incompleted','serverFile'=>'sinfoto.png');
     if(!empty( $_FILES )){
         $filename = $_FILES['file']['name'];
         $gs_name =  $_FILES['file']['tmp_name'];
         move_uploaded_file($gs_name, 'gs://seektrabajo/'.$filename);
         $answer = array( 'answer' => 'File transfer completed','serverFile' => $filename);
     }
     echo json_encode( $answer );
     Yii::app()->end();
 }

`

问题是永远不要将上传到我的存储桶的文件保存在云存储上。 这不适用于开发/本地模式,并且要么部署了appengine。 在发源地,我得到这个错误:

我只是想知道:

gsutil acl ch -u user@gmail.com:FULL_CONTROL gs://seektrabajo

来自我的谷歌控制台/ apis-autentications /电子邮件

的user@gmail.com

![网络浏览器控制台错误] [1]

http://i.stack.imgur.com/noKnh.png

有人有想法吗? 感谢。

1 个答案:

答案 0 :(得分:0)

为什么要将文件上传到静态处理程序然后将其上传到GCS? Use createUploadUrl() to template the <form> you serve。在您自己的应用程序上为该函数提供回调URL,一旦文件上传,请求将使用表单的其余参数,文件的元数据等进入您的应用程序...

使用您正在使用的模式,不仅要努力弄清楚如何正确地传输数据,还有一个简单的事实,那就是您正在处理所有的读/写操作在你的实例上,如果你打算在生产代码中使用它来支付使用过的资源,那肯定不是一个好主意。

简而言之,没有理由使用这种模式。在传统的Web应用程序中,您可以将文件表单发布到路由上的自己的服务器上,并且就像您在示例代码中一样(减去转发到GCS),但是使用App Engine,您需要考虑与传统方式略有不同您购买并托管PHP运行时的单个VM上的Web开发。