如何让用户从 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>&nbsp;&nbsp;<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 方面一切正常。