沃梦达 / 编程问答 / php问题 / 正文

使用 PHP API 可恢复上传到 Google Cloud Storage

Resumable uploading to Google Cloud Storage using PHP API(使用 PHP API 可恢复上传到 Google Cloud Storage)

本文介绍了使用 PHP API 可恢复上传到 Google Cloud Storage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以使用 Google PHP API CLIENT 成功将小文件上传到 Google Cloud Storage,但无法上传 300MB 的文件.返回内存错误.这是我的代码.

I can successfully upload small size files to Google Cloud Storage using Google PHP API CLIENT, But cant upload a 300MB file. Return with memory error. Here is my code.

$storage = new Google_Service_Storage($client);

    $file_name = "filenameo.zip";

    $obj = new Google_Service_Storage_StorageObject();
    $obj->setName($file_name);

    $resp = $storage->objects->insert(
        "bucketname",
        $obj,
        array('name' => $file_name, 'data' => file_get_contents("300mb-file.zip"), 'uploadType' => 'media')
    );

我尝试将 UploadType 更改为可恢复 .. 但没有运气.请帮忙.

i tried to change the UploadType to resumable .. but no luck. Please help.

更新:将 Http 用作 Brandon Yarbrough 答案

Update: Used the Http as Brandon Yarbrough answer

接收错误(致命错误:未捕获的异常 'Google_IO_Exception')

$storage = new Google_Service_Storage($client);

$obj = new Google_Service_Storage_StorageObject();

$obj->setName("filenameo.zip");
$obj->setBucket("bucketname");


$filen = "300mb-file.zip";
$mimetype = mime_content_type($filen);


$chunkSizeBytes = 1 * 1024 * 1024;
$client->setDefer(true);
$status = false;



$filetoupload = array('name' => $file_name, 'data' => $filen, 'uploadType' => 'media');

$request = $storage->objects->insert("bucketname",$obj,$filetoupload);

$media = new Google_Http_MediaFileUpload($client, $request, $mimetype, $chunkSizeBytes);
$handle = fopen($filen, "rb");
while (!$status && !feof($handle)) {
  $chunk = fread($handle, $chunkSizeBytes);
  $status = $media->nextChunk($chunk);
 }

$result = false;
if($status != false) {
  $result = $status;
}

fclose($handle);
// Reset to the client to execute requests immediately in the future.
$client->setDefer(false);

推荐答案

用下面的代码搞定了.

    <?php

    require_once("google-api/autoload.php");
    //require_once("google-api/src/Google/Client.php");
    //require_once("google-api/src/Google/Service/Storage.php");
    //require_once("google-api/src/Google/Http/MediaFileUpload.php");
    session_start();
    /**
        * Connect to Google Cloud Storage API
    */
    $client = new Google_Client();
    $client->setApplicationName("ApplicationName");

    // $stored_access_token - your cached oauth access token 
    if( $stored_access_token ) {
        $client->setAccessToken( $stored_access_token );
    }

    $credential = new Google_Auth_AssertionCredentials(
    "email-sdfaskjrsd@developer.gserviceaccount.com",
    array('https://www.googleapis.com/auth/devstorage.read_write'),
    file_get_contents("pathtokey/mykeyhere-7845b2eb92c9.p12")
    );

    $client->setAssertionCredentials($credential);
    if($client->getAuth()->isAccessTokenExpired()) {
        $client->getAuth()->refreshTokenWithAssertion($credential);
        // Cache the access token however you choose, getting the access token with $client->getAccessToken()
    }

    $storage = new Google_Service_Storage($client);



    if (isset($_GET['code'])) {
        if (strval($_SESSION['state']) !== strval($_GET['state'])) {
            die('The session state did not match.');
        }


        $client->authenticate($_GET['code']);
        $_SESSION['token'] = $client->getAccessToken();
        header('Location: ' . $redirect);
    }
    if (isset($_SESSION['token'])) {
        $client->setAccessToken($_SESSION['token']);
    }





    if ($client->getAccessToken()) {


            $sfilename = "mfile.zip"; //filename here
            $obj = new Google_Service_Storage_StorageObject();

            $obj->setName($sfilename);
            $obj->setBucket("myBucketS"); //bucket name here


            $filen = "pathtofile/uploadthis.zip";

            $mimetype = mime_content_type($filen);


            $chunkSizeBytes = 1 * 1024 * 1024;
            $client->setDefer(true);
            $status = false;

            $filetoupload = array('name' => $sfilename, 'uploadType' => 'resumable');

            $request = $storage->objects->insert("myBucketS",$obj,$filetoupload);

            $media = new Google_Http_MediaFileUpload($client, $request, $mimetype, null, true, $chunkSizeBytes);
            $media->setFileSize(filesize($filen));
            $handle = fopen($filen, "rb");

            while (!$status && !feof($handle)) {
                $chunk = fread($handle, $chunkSizeBytes);
                $status = $media->nextChunk($chunk);
            }

            $result = false;
            if($status != false) {
                $result = $status;
            }

            fclose($handle);
            // Reset to the client to execute requests immediately in the future.
            $client->setDefer(false);

        } else {
        // If the user hasn't authorized the app, initiate the OAuth flow
        $state = mt_rand();
        $client->setState($state);
        $_SESSION['state'] = $state;
        $authUrl = $client->createAuthUrl();
    }
    $_SESSION['token'] = $client->getAccessToken();

    print_r($status);


?>

这篇关于使用 PHP API 可恢复上传到 Google Cloud Storage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:使用 PHP API 可恢复上传到 Google Cloud Storage

基础教程推荐