Google Cloud Storage с Laravel, как скачать файл - PullRequest
1 голос
/ 20 октября 2019

Я действительно запутался в облачном хранилище Google. Я не программист, поэтому я использую Laravel и Cloud Storage Client для PHP.

https://github.com/googleapis/google-cloud-php-storage

Что я пытаюсь сделать:

Фотограф загружаетфайл предварительного просмотра, любой может его просмотреть, и он хранится в моем хранилище по умолчанию.

\Illuminate\Support\Facades\Storage::disk(env('FILESYSTEM_DRIVER'))->put(
    'storage' . DIRECTORY_SEPARATOR . $filename,
    file_get_contents($filename),
    \Illuminate\Contracts\Filesystem\Filesystem::VISIBILITY_PUBLIC
);

Затем фотограф загружает zip-файл со всеми фотографиями, скажем, в корзину с именем «downloads». Кто-то, кто заплатил за это, может щелкнуть ссылку, чтобы загрузить это. Как я могу замаскировать имя файла и убедиться, что URL не является общим? Я мог бы создать маршрут, где пользователь вошел в систему.

Route::group(['middleware' => ['role:user|store']], function() {
    Route::get('download/{orderid}', [
        'as' => 'download-link', 
        'uses' => 'OrderController@download'
    ]);
});

Какой-то тотальный код psuedo внутри действия контроллера, я не понимаю, что я делаю здесь ... Я даже не знаю, как получитьобъект (файл) ...

$query = DB::table('orders')->where('id', $request->get('orderid'))
    ->where('userid', Auth::user()->id)
    ->firstOrFail()->pluck('realfilename');

$reponse = Storage::disk('gcs')
    ->bucket('downloads')
    ->getObject($query['realfilename']);

return Storage::download('file.jpg', $name, ['Content-Type: application/zip']);

1 Ответ

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

Решение, которое я представляю, чтобы избежать совместного использования URL-адресов, заключается в следующем.

Сначала вам нужно смонтировать свои корзины, например, Cloud Storage FUSE (это работает только в Linux). любой другой локальный файл, вместо этого используйте API для получения файлов из облака, вы можете писать и читать, используя диск GS Fuse, как и любой другой локальный каталог.

Чтобы начать использовать GS Fuse, пожалуйста, отметьте link

Продолжение примера

Это пример примера url

https://example.com/dwonload/pack123.zip

  1. Сначала необходимо подтвердитьесли клиент вошел в систему или нет
    • Если нет, выйдите из системы
  2. Проверьте, купил ли пользователь эти фотографии в вашей базе данных
    • Если не выйдет
  3. Считайте файлы с диска GS Fuse, вместо этого используйте библиотеку Cloud Storage.
  4. Отправьте файл пользователю, как и любые другие локальные ресурсы.
...