谷歌云存储-上传'对象'无需使用Google客户端


Google Cloud Storage - Upload an 'Object' without using Google Client

在过去的几天里,我一直在寻找这个问题的答案,但我一直没有找到我想要的解决方案。

我有一个使用Google_Client完成此任务的完整工作版本,但是我希望能够在不使用Google_Client的情况下做到这一点。我可以在不使用它的情况下创建桶,但不能创建对象。我完全看不懂谷歌的文档(它很差)。

所以,我下面有一个函数,它接受几个参数来尝试并上传文件。我不确定$authheaders, $post_fields(文章正文)或url中需要什么。
public function upload_file($bucket, $fileName, $file, $fileType) {
        // Check if we have auth token
        if(empty($this->authtoken)) {
            echo "Please login to Google";
            exit;
        }
        // Prepare authorization headers
        $authheaders = array(
            "Authorization: Bearer " . $this->authtoken
        );
        $postbody = array();
        //Http call for creating a file
        $response = $this->http_call(self::FILE_UPLOAD_URL.$bucket.'/o?uploadType=multipart&name='.$fileName, $postbody, $authheaders);
        // Has the file been created successfully?
        if($response->success=="1") {
            return array('status' => 'success', 'errorcode' =>'', 'errormessage'=>"", 'id' => $response->job->id);
        }
        else {
            return $response;
        }
}
http_call函数:
public function http_call($url, $post_fields, $authheaders) {
        // Make http call
        $this->httpRequest->setUrl($url);
        $this->httpRequest->setPostData(json_encode($post_fields));
        $this->httpRequest->setHeaders($authheaders);
        $this->httpRequest->send();
        $response = json_decode($this->httpRequest->getResponse());
        return $response;
}

如果有人想在不使用API的情况下做到这一点,下面是我如何使用curl解决我的问题。

// Prepare authorization headers
        $authheaders = array(
            "Authorization: Bearer " . $this->authtoken,
            "Content-Type: application/pdf"
        );
        $url = self::FILE_UPLOAD_URL.$bucket.'/o/?uploadType=multipart&name='.$fileName.'';
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_POSTFIELDS, $file);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $authheaders);
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($curl, CURLOPT_USERAGENT, "Goole Cloud Storage PHP Starter Application google-api-php-client/1.1.5");
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
        // 1 is CURL_SSLVERSION_TLSv1, which is not always defined in PHP.
        curl_setopt($curl, CURLOPT_SSLVERSION, 1);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HEADER, true);

        $response = curl_exec($curl);