将近 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');
}
我现在面临的问题如下:
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"
}
对我来说,检索到的图像似乎是空的,这是正确的吗?或者我应该如何正确从本地存储中检索图像?
sync
,文件
已上传到数字海洋空间,但它们是空的(文件大小:
0MB);同时,如果作业使用队列驱动程序“database
”运行,文件根本不会上传到 Digital Ocean Spaces。有人知道如何解决这个问题吗?
希望有人能帮助我。 谢谢你
在
filesystems.php中的
'url' => env('DO_SPACES_URL')
下面添加此变量 'bucket' => env('DO_SPACES_BUCKET')
。
在你的 .env 中放入变量
DO_SPACES_URL=https://{your bucket name}.ams3.digitaloceanspaces.com
像这样上传文件:
Storage::disk('do_spaces')->put('uploads', $request->file('file'), 'public');
我有以上问题。如何解决这个问题?使用 league/flysystem-aws-s3-v3 3.22 和 laravel 10