这几乎是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
"运行,则文件根本不会上载到数字海洋空间。
有人知道如何解决这件事吗?
希望有人能帮我。谢谢
1条答案
按热度按时间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.上传文件如下: