我有个问题 . 欢迎任何帮助 .
我正在开发一个需要使用谷歌apis的解决方案,如 Cloud 存储, Cloud 端硬盘等 .
在clasic Profiles 页面中,我必须上传图片 Profiles . 然后我使用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();
}
`
问题是永远不要在 Cloud 存储上保存上传到我的存储桶的文件 . 这不适用于开发/本地模式,并且要么部署了appengine . 在appengine土地,我得到这个错误:
我只是鼓励:
gsutil acl ch -u user@gmail.com:FULL_CONTROL gs://seektrabajo
user@gmail.com来自我的谷歌控制台/ apis-autentications /电子邮件
![网页浏览器控制台错误] [1]
http://i.stack.imgur.com/noKnh.png
有人有想法吗?谢谢 .
1 回答
为什么要将文件上传到静态处理程序然后将其上传到GCS? Use createUploadUrl() to template the <form> you serve . 在您自己的应用程序上为该函数提供回调URL,一旦文件上传,请求将使用表单的其余参数,文件的元数据等进入您的应用程序...
使用您正在使用的模式,不仅要努力弄清楚如何正确地传输数据,而且还要处理您实例上的所有读/写操作,如果您打算使用它肯定不是一个好主意这在 生产环境 代码中,您可以为使用的资源付费 .
简而言之,没有理由使用这种模式 . 在传统的Web应用程序中,您可以将文件表单发布到路由上的自己的服务器上,并且就像您在示例代码中一样(减去转发到GCS),但是使用App Engine,您需要与传统方式略有不同您购买并托管PHP运行时的单个VM上的Web开发 .