从 laravel 上传文件到数字海洋空间的问题

问题描述 投票:0回答:2

将近 48 小时后,我遇到了从 laravel 上传到 Digital Ocean 空间的文件问题,但无法正常工作。

我已经成功构建了一个 livewire 组件来处理图像的多次上传,每个图像都存储在 laravel 本地存储中。

由于在该网站上我们计划托管数千张不同的图像,因此我们现在决定使用 Digital Ocean Spaces 作为存储磁盘。

为了做到这一点,首先我根据需要安装了

league/flysystem-aws-s3-v3
作曲家包。

比我的

config/filesystem.php
我做了以下事情:

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

在我的

.env
中:

DO_SPACES_KEY=key
DO_SPACES_SECRET=secret
DO_SPACES_ENDPOINT=https://ams3.digitaloceanspaces.com
DO_SPACES_REGION=AMS3 
DO_SPACES_BUCKET=bucket_name

在我的 livewire 组件中,将图像上传到本地存储后,对于每个图像,我正在分派一个作业(

dispatch(new ResizeUploadToDo($pic, $extension));
),这应该是:

  • 从本地存储检索图像
  • 将其传递到干预库以调整其大小并应用水印。
  • 将处理后的图像上传到数字海洋空间
  • 从本地存储中删除旧图像

这是我迄今为止在工作中编写的代码

handle()
方法:

public function handle()
    {   
        $path = Storage::disk('local')->path($this->pic->storage_file_path);
        $img=Image::make($path);
        $img->resize(600, 600);
        $folderStructure = Carbon::now()->format('Y') . '/' . Carbon::now()->format('m') . '/' . Carbon::now()->format('d'). '/';
        $filename=time().'.'.$this->extension;

        Storage::disk('do_spaces')->put($folderStructure . $filename, $img, 'public');

        
    }

我现在面临的问题如下:

  1. 如果我尝试在使用干预实例化它后立即执行 dd($img) 图书馆,我得到以下信息:
     Intervention\Image\Image {#1570 ▼ // app\Jobs\Images\ResizeUploadToDo.php:49
          #driver: Intervention\Image\Gd\Driver {#1578 ▼
            +decoder: Intervention\Image\Gd\Decoder {#1598 ▼
              -data: null
            }
            +encoder: Intervention\Image\Gd\Encoder {#363 ▼
              +result: null
              +image: null
              +format: null
              +quality: null
            }
          }
          #core: GdImage {#394 ▼
            +size: "600x600"
            +trueColor: true
          }
          #backups: []
          +encoded: ""
          +mime: "image/png"
          +dirname: "C:\Users\Gianmarco\wa\hotelista\storage\app22/12/12"
          +basename: "SPcNL5FD3OZV4heHWA103J4n5YU8xOCG1SU7pyMd.png"
          +extension: "png"
          +filename: "SPcNL5FD3OZV4heHWA103J4n5YU8xOCG1SU7pyMd"
        }

对我来说,检索到的图像似乎是空的,这是正确的吗?或者我应该如何正确从本地存储中检索图像?

  1. 我注意到,如果作业使用队列驱动程序运行
    sync
    ,文件 已上传到数字海洋空间,但它们是空的(文件大小: 0MB);同时,如果作业使用队列驱动程序“
    database
    ”运行,文件根本不会上传到 Digital Ocean Spaces。

有人知道如何解决这个问题吗?

希望有人能帮助我。 谢谢你

laravel jobs digital-ocean-spaces
2个回答
0
投票
  1. filesystems.php
    中的
    'url' => env('DO_SPACES_URL')
    下面添加此变量 'bucket' => env('DO_SPACES_BUCKET')

  2. 在你的 .env 中放入变量

    DO_SPACES_URL=https://{your bucket name}.ams3.digitaloceanspaces.com

  3. 像这样上传文件:

Storage::disk('do_spaces')->put('uploads', $request->file('file'), 'public');

0
投票

我有以上问题。如何解决这个问题?使用 league/flysystem-aws-s3-v3 3.22 和 laravel 10

© www.soinside.com 2019 - 2024. All rights reserved.