使用PHP从Compute Engine上传文件到云存储

时间:2014-07-17 12:47:34

标签: google-cloud-storage google-compute-engine

似乎没有示例应用程序或演示使用PHP将文件从例如Compute Engine上托管的PHP应用程序上传到Google云端存储。

我正在努力对google-api-php-client库进行逆向工程,以弄清楚它应该如何工作。

我已经在github上查看了storage-getting-started-php,但是在脚本中似乎没有任何上传内容。

我可以使用JSON库并编写我自己的php文件处理库,但如果代码已经在php客户端库中编写,这似乎是不必要的。

对此问题的任何帮助将不胜感激。我正在迁移一个真正高流量的站点来计算引擎。

2 个答案:

答案 0 :(得分:1)

从github查看此链接。 https://github.com/google/google-api-php-client/tree/master/examples。我的理解是你需要获得一个授权令牌才能使用PHP上传文件。

答案 1 :(得分:0)

我一直与谷歌支持联系。他们给了我这个代码。虽然我还没有机会测试它。

<?php
include 'lib/cms.php';
require_once('config.php');
require_once(MVC_ROOT . 'models/App.php');

ini_set("memory_limit", "-1M");
ini_set("max_input_time", "-1");
ini_set("max_execution_time", "-1");
set_time_limit(0);
ignore_user_abort();

$copyOrMove =  (SYSTEM_PLATFORM == 'gogrid') ? 'cp' : 'mv';

$cms = new CMS();
$dbh = $cms->dbh;

$data = $_POST['data'];
//$appcode = $cms->safeInput($_REQUEST['app']);
$appcode = $cms->getAppcode();
$type = $_REQUEST['type'];

$appdir = '../apps/' . $appcode;
if (!file_exists($appdir)) mkdir($appdir);
if (!file_exists($appdir . '/images')) mkdir($appdir . '/images');
if (!file_exists($appdir . '/images/org')) mkdir($appdir . '/images/org');
if (!file_exists($appdir . '/images/gallery')) mkdir($appdir . '/images/gallery');
if (!file_exists($appdir . '/images/30')) mkdir($appdir . '/images/30');
if (!file_exists($appdir . '/images/75')) mkdir($appdir . '/images/75');
if (!file_exists($appdir . '/images/200')) mkdir($appdir . '/images/200');
if (!file_exists($appdir . '/images/resources')) mkdir($appdir . '/images/resources');
if (!file_exists($appdir . '/attachments')) mkdir($appdir . '/attachments');


if ($type == "image") {

    $filename = 'homepage-' . date("Ymd-His") . '.png';
    $dir = "../apps/" . $appCode . "/images";
    if (!is_dir($dir)) {
        mkdir($dir, 0755, true);
    }
    //first lets delete the old ones...
    foreach (glob("../apps/" . $appcode . "/images/homepage*.png") as $killfilename) {
        echo "$killfilename size " . filesize($killfilename) . "\n";
        unlink($killfilename);
        exec("gsutil -m rm gs://gs.appbuild.io/apps/$appcode/images/homepage*.png");
    }

    //$filename='homepage.png';
    $file = "../apps/$appcode/images/" . $filename;

    $uri = substr($data, strpos($data, ",") + 1);
    file_put_contents($file, base64_decode($uri));

    $dir = "../apps/" . $appcode . "/images/resources";
    resizeImage($file, 640, 960, $dir . "/Default@2x.png");
    resizeImage($file, 640, 1136, $dir . "/Default-568h@2x.png");
    resizeImage($file, 320, 480, $dir . "/Default.png");

    $pathArray = array("../apps/$appcode/images/resources/Default@2x.png","../apps/$appcode/images/resources/Default-568h@2x.png","../apps/$appcode/images/resources/Default.png");

    exec("gsutil $copyOrMove ../apps/$appcode/images/$filename gs://gs.appbuild.io/apps/$appcode/images/");

    exec("gsutil -m $copyOrMove ". implode(' ',$pathArray) ." gs://gs.appbuild.io/apps/$appcode/images/resources/");

    $sql = "INSERT INTO appearance SET appearance_background_image='$filename', app_code='$appcode' ON DUPLICATE KEY UPDATE appearance_background_image='$filename'";
    $stmt = $dbh->query($sql);
    $dbh = null;

    // return the filename
    echo URL_CDN_ROOT . "apps/$appcode/images/" . $filename;
} else if ($type == "icon") {
    $size = $_REQUEST['size'];
    $filename = 'icon_' . $size . '.png';

    $dir = "../apps/" . $appcode . "/images/resources";

    if (!is_dir($dir)) {
        mkdir($dir, 0755, true);
    }

    $file = $dir . "/$filename";
    $uri = substr($data, strpos($data, ",") + 1);
    file_put_contents($file, base64_decode($uri));

    resizeImage($file, 57, 57, $dir . "/icon_57.png");
    resizeImage($file, 57, 57, $dir . "/icon.png");
    resizeImage($file, 72, 72, $dir . "/icon_72.png");
    resizeImage($file, 114, 114, $dir . "/icon_114.png");
    resizeImage($file, 114, 114, $dir . "/icon@2x.png");
    resizeImage($file, 120, 120, $dir . "/icon_120.png");
    resizeImage($file, 175, 175, $dir . "/icon_175.png");
    resizeImage($file, 1024, 1024, $dir . "/icon_1024.png");

    $filepaths = array($filename, "icon_57.png", "icon.png", "icon_72.png", "icon_114.png", "icon@2x.png", "icon_120.png", "icon_175.png", "icon_1024.png");

    $fromArray = array();
    foreach ($filepaths as $filenm){
        $fromArray[] = "../apps/$appcode/images/resources/$filenm";
    }

    exec("gsutil -m $copyOrMove ". implode(' ', $fromArray) ." gs://gs.appbuild.io/apps/$appcode/images/resources/");   

    $app = new App($appcode);
    $app->setAppIcon(implode(',', $filepaths));

    echo URL_CDN_ROOT . "apps/$appcode/images/resources/$filename";
}

if (SYSTEM_PLATFORM == 'computeengine' && $appcode != '') delTree("../apps/$appcode"); 

function resizeImage($filename, $new_width, $new_height, $dirname)
{
    list($width, $height) = getimagesize($filename);
    $image_p = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefrompng($filename);
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    //$newfilename = $dir . "/icon_" . $new_width . ".png";
    imagepng($image_p, $dirname);
}

function delTree($dir) { 
    $files = array_diff(scandir($dir), array('.','..')); 
    foreach ($files as $file) { 
        (is_dir("$dir/$file")) ? delTree("$dir/$file") : unlink("$dir/$file"); 
    } 
    return rmdir($dir); 
} 

?>