【问题标题】:Google Cloud Storage with Laravel, how to download a file使用 Laravel 的 Google Cloud Storage,如何下载文件
【发布时间】:2020-02-16 17:16:38
【问题描述】:

我对 Google Cloud Storage 感到非常困惑。 我不是程序员,所以我使用 Laravel 和 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'
    ]);
});

控制器动作中的一些完全伪代码,我不在这里做什么...我什至不知道如何获取对象(文件)...

$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']);

【问题讨论】:

    标签: php laravel download google-cloud-storage


    【解决方案1】:

    我想避免url共享的解决方案是这样的。

    首先,您需要安装您的存储桶,例如 Cloud Storage FUSE(它仅适用于 linux) 我们的想法是像访问任何其他本地文件一样访问您的文件,而不是使用 API 从云中获取文件,您可以像任何其他本地目录一样使用 GS Fuse 驱动器进行读写。

    要开始使用GS Fuse,请查看link

    继续举例

    这是一个示例网址

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

    1. 首先您需要验证客户是否已登录
      • 如果不退出
    2. 检查用户是否在您的数据库中购买了该图片
      • 如果不退出
    3. 从 GS Fuse 驱动器读取文件,而不是使用 Cloud Storage 库。
    4. 像任何其他本地资源一样将文件发送给用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2019-01-26
      • 2021-12-23
      • 1970-01-01
      • 2017-11-08
      • 2016-08-19
      相关资源
      最近更新 更多