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



我从laravel上传文件到Digital Ocean spaces已经快48小时了,我无法使它工作。

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

在这个网站上,我们计划托管数千个不同的图像,我们现在决定使用数字海洋空间作为存储磁盘。

为了做到这一点,首先我按要求安装了league/flysystem-aws-s3-v3composer包。

在我的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. 如果我尝试添加($img)后,立即与干预实例化它库,我得到以下:
InterventionImageImage {#1570 ▼ // appJobsImagesResizeUploadToDo.php:49
#driver: InterventionImageGdDriver {#1578 ▼
+decoder: InterventionImageGdDecoder {#1598 ▼
-data: null
}
+encoder: InterventionImageGdEncoder {#363 ▼
+result: null
+image: null
+format: null
+quality: null
}
}
#core: GdImage {#394 ▼
+size: "600x600"
+trueColor: true
}
#backups: []
+encoded: ""
+mime: "image/png"
+dirname: "C:UsersGianmarcowahotelistastorageapp22/12/12"
+basename: "SPcNL5FD3OZV4heHWA103J4n5YU8xOCG1SU7pyMd.png"
+extension: "png"
+filename: "SPcNL5FD3OZV4heHWA103J4n5YU8xOCG1SU7pyMd"
}

对我来说,似乎检索图像是空的,是正确的吗?或者我应该怎么做才能正确地从本地存储检索图像?

  1. 我注意到,如果作业与队列驱动程序sync一起运行,则文件上传到数字海洋空间,但它们是空的(文件大小:0 mb);同时,如果作业在队列驱动程序'database'下运行,则文件根本不上传到Digital Ocean Spaces。

有谁知道怎么解决这个问题吗?

希望有人能帮我。谢谢你

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

相关内容

  • 没有找到相关文章

最新更新