Какое решение для загрузки файлов произвольного размера в облачное хранилище с помощью Google App Engine php55 или php7? - PullRequest
1 голос
/ 19 октября 2019

У меня есть служба php55 google app engine, которая периодически проверяет общедоступный веб-сайт и загружает файл. Этот файл обычно маленький (<1MB). Мое простое приложение основано на следующем: </p>

<?php
$strSource = 'https://example.com/file.zip';

$strBucket = 'bucket-1234';
$strDirectory = '/path/to/file/'; // Google Cloud Storage directory
$strName = 'file.zip';
$strDestination = 'gs://' . $strBucket . '.appspot.com' . $strDirectory . $strName;

copy($strSource,$strDestination);
?>

Я обнаружил, что этот файл иногда больше (превышает ограничение размера ответа 32 МБ ). Как мне написать этот скрипт для обработки файла, 1 МБ или 100 МБ?

Я вижу, что люди рекомендуют " Blobstore ", с которым у меня нет опыта работы. Даже если бы я понял это решение (которое, похоже, сфокусировано на совершенно другом сценарии использования) , оно вообще не доступно для PHP. Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Использовать Служба передачи хранилища Google (STS) . Его можно вызвать из Google Cloud SDK из существующего приложения App Engine, и файлы будут перенесены непосредственно из S3 в GCS, не выходя за пределы ограничений App Engine. Основываясь на вашем описании, я считаю, что он соответствует вашим требованиям:

  • Нет ограничений на передачу данных
  • Минимальные изменения кода
  • "Без сервера" и прост в настройке

STS имеет некоторые дополнительные преимущества:

  • Нулевые затраты времени выполнения . То есть App Engine просто вызывает API-интерфейс STS, чтобы запустить задание на передачу, которое обрабатывается STS, поэтому вам не нужно платить за то время, которое GAE обычно использует для загрузки / выгрузки файлов.
  • Выможет работать даже на больше без сервера , вызывая STS из облачной функции, запускаемой Cloud Scheduler . Я сомневаюсь, что вы сильно сэкономите на расходах, но это точно будет аккуратная настройка.

В документации GCP есть руководство по Как настроить Transfer из Amazon S3в облачное хранилище .


Дополнительные примечания:

0 голосов
/ 23 октября 2019

Я бы порекомендовал вам использовать экземпляр Compute Engine, поскольку GAE имеет ограничение в 32 МБ для размера ответов. Я нашел этот пост , где пользователь проверяет, есть ли новые доступные файлы, и если есть какой-то файл, он загружает непосредственно в GCS.

Для того, чтобы сделать это, и как указанов документации вы должны создать экземпляр в GCE и установить и настроить клиентскую библиотеку для языка, который вы собираетесь использовать (как вы упоминали в своем посте, что вы былииспользуя PHP, все ссылки будут ссылаться на этот язык, но имейте в виду, что вы можете выбрать и другой язык как C ++, Java, Python ...).

Здесь вы можете найти пример в PHP о том, как загрузить объект в GCS :

function upload_object($bucketName, $objectName, $source)
{
    $storage = new StorageClient();
    $file = fopen($source, 'r');
    $bucket = $storage->bucket($bucketName);
    $object = $bucket->upload($file, [
        'name' => $objectName
    ]);
    printf('Uploaded %s to gs://%s/%s' . PHP_EOL, basename($source), $bucketName, $objectName);
}

Другие примеры можно найти в Github-репозитории из Google Cloud Platform.

Hopeэто помогает!

...