为PHP7.2创建Google Cloud Storage上传URL

时间:2018-11-16 22:08:16

标签: google-app-engine google-cloud-platform google-cloud-storage php-7.2

我感觉好像在这里丢失了一些东西,但是在标准环境中使用PHP 5.5的Google App Engine上,我可以非常轻松地创建上传URL,以供用户上传文件,而不会浪费时间在PHP中,例如:

<?php
use google/appengine/api/cloud_storage/CloudStorageTools;

?><form action="<?php echo CloudStorageTools::createUploadUrl('my/upload/handler.php'); ?>" method="post">
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
</form>

当然大大简化了(因为该URL仅持续60秒)。

但是,此API似乎对运行PHP 7.2的应用程序引擎不可用,我确实需要使用它,而且我似乎找不到用于获取上载URL的备用API。这些真的停止了吗?

还有其他一些非常有用的功能,例如getImageURL(),用于获取缩略图等。当然,许多文档仍然指向上述用于处理用户上传到App Engine网站的方法!

那么我如何在较新的API中创建和使用上传URL?

1 个答案:

答案 0 :(得分:2)

是的,您可以使用PHP 7.2 Google Client Library创建和使用上传URL进行云存储。

您可以直接将处理程序放入表单的action属性中,而无需调用API。

请注意,在此示例中,您将要在其中存储文件的存储桶的名称作为环境变量放在 app.yaml 文件中:

runtime: php72
env_variables:
  GOOGLE_STORAGE_BUCKET: <your_bucket_name>

index.php

<?php

namespace Google\Cloud\Samples\AppEngine\Storage;

use Google\Auth\Credentials\GCECredentials;

require_once __DIR__ . '/vendor/autoload.php';

$bucketName = getenv('GOOGLE_STORAGE_BUCKET');
$projectId = getenv('GOOGLE_CLOUD_PROJECT');
$defaultBucketName = sprintf('%s.appspot.com', $projectId);

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    switch ($_SERVER['REQUEST_URI']){

       case '/user/upload':
          upload_file($bucketName);
          exit;
    }
    header('Location: /');
    exit;
}
?>

<html>
  <form action="/user/upload" enctype="multipart/form-data" method="post">
            Files to upload: <br>
           <input type="file" name="uploaded_files" size="40">
           <input type="submit" value="Send">
  </form>
</html>

处理程序功能

function upload_file($bucketName)
{
    $fileName = $_FILES['uploaded_files']['name'];
    $tempName = $_FILES['uploaded_files']['tmp_name'];
    move_uploaded_file($tempName, "gs://${bucketName}/${fileName}.txt");
    sprintf('Your file "%s" has been uploaded.', $fileName);
}

composer.json

{
    "require": {
        "google/cloud-storage": "^1.5"
    },
    "require-dev": {
        "phpunit/phpunit": "^5",
        "google/cloud-tools": "^0.6"
    }
}

我建议您从Github中克隆样本并自己尝试。