我有问题。欢迎任何帮助。
我正在开发一个需要使用谷歌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
![网络浏览器控制台错误] [1]
http://i.stack.imgur.com/noKnh.png
有人有想法吗? 感谢。
答案 0 :(得分:0)
为什么要将文件上传到静态处理程序然后将其上传到GCS? Use createUploadUrl()
to template the <form>
you serve。在您自己的应用程序上为该函数提供回调URL,一旦文件上传,请求将使用表单的其余参数,文件的元数据等进入您的应用程序...
使用您正在使用的模式,不仅要努力弄清楚如何正确地传输数据,还有一个简单的事实,那就是您正在处理所有的读/写操作在你的实例上,如果你打算在生产代码中使用它来支付使用过的资源,那肯定不是一个好主意。
简而言之,没有理由使用这种模式。在传统的Web应用程序中,您可以将文件表单发布到路由上的自己的服务器上,并且就像您在示例代码中一样(减去转发到GCS),但是使用App Engine,您需要考虑与传统方式略有不同您购买并托管PHP运行时的单个VM上的Web开发。