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

disho6za  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(468)

这几乎是48小时,我面临着一个问题,从laravel上传到数字海洋空间的文件,我不能让它工作。
我已经成功地建立了一个livewire组件,处理图像的多个上传,每个图像都存储在laravel本地存储。
由于我们计划在这个网站上存放数千张不同的图片,我们现在决定使用数字海洋空间作为存储磁盘。
为了做到这一点,作为第一次我安装了league/flysystem-aws-s3-v3 composer 包的要求。
在我的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运行,文件会上传到数字海洋空间,但它们是空的(文件大小:0 MB);而如果作业使用队列驱动程序“database "运行,则文件根本不会上载到数字海洋空间。
有人知道如何解决这件事吗?
希望有人能帮我。谢谢

6uxekuva

6uxekuva1#

1.在filesystems.php中,将变量'url' => env('DO_SPACES_URL')添加到'bucket' => env('DO_SPACES_BUCKET')下面。
1.在**.env**中,放入变量DO_SPACES_URL=https://{your bucket name}.ams3.digitaloceanspaces.com
1.上传文件如下:

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

相关问题