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

Har*_*ikk 2 google-app-engine google-cloud-storage google-cloud-platform 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>
Run Code Online (Sandbox Code Playgroud)

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

但是,此 API 似乎不适用于运行 PHP 7.2 的应用程序引擎,我确实需要使用它,而且我似乎找不到用于获取上传 URL 的替代 API;这些真的停产了吗?

还有其他非常有用的功能,例如getImageURL()获取缩略图等。当然,很多文档仍然指向上述处理用户上传到应用引擎站点的方法!

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

Tas*_*sZG 5

是的,您可以使用适用于 Cloud Storage 的PHP 7.2 Google 客户端库创建和使用上传 URL 。

可以直接将handler放在表单的action属性中,无需调用API。

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

runtime: php72
env_variables:
  GOOGLE_STORAGE_BUCKET: <your_bucket_name>
Run Code Online (Sandbox Code Playgroud)

索引.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>
Run Code Online (Sandbox Code Playgroud)

处理函数

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);
}
Run Code Online (Sandbox Code Playgroud)

作曲家.json

{
    "require": {
        "google/cloud-storage": "^1.5"
    },
    "require-dev": {
        "phpunit/phpunit": "^5",
        "google/cloud-tools": "^0.6"
    }
}
Run Code Online (Sandbox Code Playgroud)

我建议您从 Github 克隆示例并自己尝试。