在PHP中执行断点续传-Google云存储

时间:2018-09-20 08:58:01

标签: php google-cloud-storage

我想使用PHP和服务帐户从服务器上实现this workflow。基本上,我只想在服务器上生成简历URI,在客户端上发送它,然后从客户端上载。但是PHP SDK没有提供执行此操作的方法!

不想使用签名URL,因为它们不允许我控制要上传的文件。我只想使用PHP SDK加载的凭据(不记名令牌)进行简单的POST(如我链接的页面中所述)。

是否有必要这样做而无需重新编码整个身份验证部分?

1 个答案:

答案 0 :(得分:0)

是否要重现[1]中提供的步骤以使用PHP保存可恢复会话URI?

如果是这种情况,我认为您可以使用file_get_contents()函数构建一个简单的PHP POST请求(使用http_build_query()函数[2]生成URL编码的查询字符串以指定POST变量)

例如,对于可恢复的会话(如文档[1]中所示):

POST https://www.googleapis.com/upload/storage/v1/b/myBucket/o?uploadType=resumable HTTP/1.1
Authorization: Bearer [YOUR_AUTH_TOKEN]
Content-Length: 38
Content-Type: application/json; charset=UTF-8
X-Upload-Content-Type: image/jpeg
X-Upload-Content-Length: 2000000

{
  "name": "myObject"
}

您可以尝试使用PHP脚本发出此POST请求。 PHP脚本的可能选项与此类似:

<?php

    $post = http_build_query(array('name'=>'myObject')); // POST variable "name"

    // Create the HTTP Headers
    $headers = array(
        'http' => array(
            'method'  => 'POST',
            'header'  => "Content-type: application/json\r\n"."charset=UTF-8\r\n"."X-Upload-Content-Type: image/jpeg\r\n"."X-Upload-Content-Length: 2000000\r\n",
            'content' => $post
            )
        );

    $s_context = stream_context_create($headers);

    $uri = file_get_contents('https://www.googleapis.com/upload/storage/v1/b/myBucket/o?uploadType=resumable', false, $s_context);

?>

您可以尝试使用此PHP脚本并发布结果吗?

[1] https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload

[2] http://php.net/manual/en/function.http-build-query.php