如何让用户从 google 应用引擎直接上传到 google 数据存储?
How to let users upload directly to google datastorage from google app engine?
我无法让用户将文件上传到我在 google 应用程序引擎上的 php 程序 运行。我正在尝试关注 this google manual.
我正在使用 codeIgniter 3,我设置了以下控制器:
Projecteditor.php:
public function index( $cluster_id )
{
if( $this->require_min_level( 1 ) )
{
$project_access_lvl = $this->check_access_lvl( $cluster_id );
if( $project_access_lvl >= 0 )
{
// Upload files to Google Cloud Storage
$my_bucket = 'THE_ID.appspot.com';
$options = ['gs_bucket_name' => $my_bucket]; //todo app id
$upload_url = CloudStorageTools::createUploadUrl('/main.php/upload/handler', $options);
$view_data['upload_url'] = $upload_url;
// Display webpage
$cluster = $this->cluster_model->get_cluster_by_id( $cluster_id )[0];
$project = $this->project_model->get_projects( $cluster['projecten_project_id'])[0];
$view_data['fase_details'] = $this->get_fase_details( $cluster['fase'] );
$view_data['project_name'] = $project['naam'];
echo $this->load->view('templates/header', '', TRUE);
echo $this->load->view('projecteditor/index', ( isset( $view_data ) ) ? $view_data : '', TRUE );
echo $this->load->view('templates/footer', '', TRUE);
}
else
{
// TODO syslog
}
}
}
Upload.php:
public function handler()
{
$my_bucket = 'THE_ID.appspot.com';
# [START move_uploaded_file]
$file_name = $_FILES['uploaded_files']['name'];
$temp_name = $_FILES['uploaded_files']['tmp_name'];
move_uploaded_file($temp_name, "gs://${my_bucket}/${file_name}.txt");
# [END move_uploaded_file]
return sprintf('Your file "%s" has been uploaded.', $file_name);
}
当然,我用正确的桶 ID 替换了 THE_ID。
Projecteditor controller对应的view里面的窗体:
<?php
echo form_open($upload_url, array('enctype' => 'multipart/form-data'));
?>
<div class="col-lg-12">
<div id="my-dropzone" class="dropzone" action="#">
<div class="dropzone-previews"></div>
<button type="submit" class="btn btn-success pull-right"><i class="fa fa-upload"></i> <span class="bold">Upload</span></button>
</div>
</div></div>
<?php echo form_close(); ?>
文件是使用 jQuery 保管箱插件上传的。
我怀疑我在 CloudStorageTools::createUploadUrl 中输入了错误的亲戚 url 但我无法真正找出我应该输入的亲戚 URL.
两个控制器的绝对 url 是:
Projecteditor.php:
https://example.com/projecteditor/index/SOME_VARIABLE
Upload.php:
https://example.com/main.php/upload/handler
当我的代码执行时,我得到一个 post 到 Projecteditor.php 但不是 Upload.php 并且数据存储桶保持为空。
关于google存储桶,我也用了this source。
如果我做错了什么或者有其他方法(更简单的方法)来存储我的数据,请告诉我。
提前致谢
显然 jQuery 保管箱插件配置错误导致文件无法上传,PHP 方面一切正常。
我无法让用户将文件上传到我在 google 应用程序引擎上的 php 程序 运行。我正在尝试关注 this google manual.
我正在使用 codeIgniter 3,我设置了以下控制器:
Projecteditor.php:
public function index( $cluster_id )
{
if( $this->require_min_level( 1 ) )
{
$project_access_lvl = $this->check_access_lvl( $cluster_id );
if( $project_access_lvl >= 0 )
{
// Upload files to Google Cloud Storage
$my_bucket = 'THE_ID.appspot.com';
$options = ['gs_bucket_name' => $my_bucket]; //todo app id
$upload_url = CloudStorageTools::createUploadUrl('/main.php/upload/handler', $options);
$view_data['upload_url'] = $upload_url;
// Display webpage
$cluster = $this->cluster_model->get_cluster_by_id( $cluster_id )[0];
$project = $this->project_model->get_projects( $cluster['projecten_project_id'])[0];
$view_data['fase_details'] = $this->get_fase_details( $cluster['fase'] );
$view_data['project_name'] = $project['naam'];
echo $this->load->view('templates/header', '', TRUE);
echo $this->load->view('projecteditor/index', ( isset( $view_data ) ) ? $view_data : '', TRUE );
echo $this->load->view('templates/footer', '', TRUE);
}
else
{
// TODO syslog
}
}
}
Upload.php:
public function handler()
{
$my_bucket = 'THE_ID.appspot.com';
# [START move_uploaded_file]
$file_name = $_FILES['uploaded_files']['name'];
$temp_name = $_FILES['uploaded_files']['tmp_name'];
move_uploaded_file($temp_name, "gs://${my_bucket}/${file_name}.txt");
# [END move_uploaded_file]
return sprintf('Your file "%s" has been uploaded.', $file_name);
}
当然,我用正确的桶 ID 替换了 THE_ID。
Projecteditor controller对应的view里面的窗体:
<?php
echo form_open($upload_url, array('enctype' => 'multipart/form-data'));
?>
<div class="col-lg-12">
<div id="my-dropzone" class="dropzone" action="#">
<div class="dropzone-previews"></div>
<button type="submit" class="btn btn-success pull-right"><i class="fa fa-upload"></i> <span class="bold">Upload</span></button>
</div>
</div></div>
<?php echo form_close(); ?>
文件是使用 jQuery 保管箱插件上传的。 我怀疑我在 CloudStorageTools::createUploadUrl 中输入了错误的亲戚 url 但我无法真正找出我应该输入的亲戚 URL.
两个控制器的绝对 url 是:
Projecteditor.php: https://example.com/projecteditor/index/SOME_VARIABLE
Upload.php: https://example.com/main.php/upload/handler
当我的代码执行时,我得到一个 post 到 Projecteditor.php 但不是 Upload.php 并且数据存储桶保持为空。
关于google存储桶,我也用了this source。
如果我做错了什么或者有其他方法(更简单的方法)来存储我的数据,请告诉我。
提前致谢
显然 jQuery 保管箱插件配置错误导致文件无法上传,PHP 方面一切正常。