Создайте URL загрузки Google Cloud Storage для PHP7.2 - PullRequest
0 голосов
/ 17 ноября 2018

Мне кажется, что я чего-то здесь упускаю, но в Google App Engine с использованием PHP 5.5 в стандартной среде я могу очень легко создавать 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, что мне действительно нужноиспользовать, и я не могу найти альтернативный API для получения URL загрузки;действительно ли они были прекращены?

Были и другие действительно полезные функции, такие как getImageURL() для получения миниатюр и тому подобное.Конечно, большая часть документации по-прежнему указывает на описанный выше способ обработки пользовательских загрузок на сайт механизма приложений!

Так как мне создать и использовать URL-адреса для загрузки в более новом API?

1 Ответ

0 голосов
/ 18 декабря 2018

Да, вы можете создавать и использовать URL-адреса для загрузки с помощью PHP 7.2 Клиентская библиотека Google для облачного хранилища.

Вы можете непосредственно поместить обработчик в атрибут действия формы, не вызывая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 и попробовать его самостоятельно.

...