如何防止文件在数字海洋空间公开?

时间:2021-04-10 22:44:35

标签: laravel laravel-7 laravel-storage laravel-filesystem digital-ocean-spaces

大家好,我坚持使用 Digital Ocean,我想阻止我的文件公开。

首先。我这样设置 .env 文件

DO_SPACES_KEY= THE KEY
DO_SPACES_SECRET= THE SECRET
DO_SPACES_ENDPOINT=https://sgp1.digitaloceanspaces.com
DO_SPACES_REGION=sgp1
DO_SPACES_BUCKET= MY BUCKET NAME
DO_SPACES_URL=https://mydomain.sgp1.digitaloceanspaces.com

然后我设置config->filesystem.php

'do_spaces' => [
    'driver' => 's3',
    'key' => env('DO_SPACES_KEY'),
    'secret' => env('DO_SPACES_SECRET'),
    'region' => env('DO_SPACES_REGION'),
    'bucket' => env('DO_SPACES_BUCKET'),
    'url' => env('DO_SPACES_URL'),
    'endpoint' => env('DO_SPACES_ENDPOINT'),
    'visibility' => 'public',
],

之后让控制器存储文件

    //convert image name
    $stringImageReFormat=base64_encode('_'.time());
    $ext=$request->file('image')->getClientOriginalExtension();
    $imageName=$stringImageReFormat.".".$ext;
    $imageEncoded=File::get($request->image);

    //upload & insert
     Storage::disk('do_spaces')->put('public/user_image/'.$imageName,$imageEncoded);

    // Insert Data to Table
    $user=new User();
    $user->image=$imageName;
    $user->save();

在我的刀片模板上,我像这样检索文件

{{ Storage::disk('do_spaces')->url('public/user_image/'.$user->image) }}

这就是我没有将可见性设置为公开时得到的

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<BucketName>mybucket</BucketName>
<RequestId>tx0000000000000088d0617-00607228ae-13200e4-sgp1b</RequestId>
<HostId>13200e4-sgp1b-sgp1-zg02</HostId>
</Error>

如果我将 filesystem.php 中的可见性设置为 public。无需身份验证即可查看文件。

预先感谢您提供任何帮助或建议。

0 个答案:

没有答案