在我的 Laravel API 调用中,我使用存储来上传文件。然后我想使用以下方法重命名并将文件移动到公共目录:
$dest = '/var/www/public/uploads/';
Storage::disk('local')->put($filename.'.'.$extension, File::get($file));
$oldfilename = $filename.'.'.$extension;
Storage::move($oldfilename, $dest.$newImageName);
但是我没有将文件移动到 $dest 目录,而是在我的 storage/app 文件夹中使用 $dest 目录名称创建了一个文件夹,并将文件复制到那里。我也尝试过在
$dest.$newImageName
周围使用双引号,但没有成功。
如果你在
config/filesystems.php中有一个数组
['disks']['public']
,你可以这样做:
Storage::disk('public')->move($oldfilename, $dest.$newImageName);
如果您不创建如下所示的:
'public' => [
'driver' => 'local',
'root' => storage_path( 'app/public' ),
'visibility' => 'public',
],
然后您就可以将public“磁盘”与存储外观一起使用。
注意,你不必再指定绝对路径,Laravel 会知道存储路径是 app/public。
编辑
另一个可能有效的配置选项:
'public' => [
'driver' => 'local',
'root' => public_path(),
'visibility' => 'public',
],
此方法适用于您的主机是cPanel且终端功能可用的情况。
首先进入你的配置>filesystems.php
最后一行是这样的:
'links' => [
public_path('storage') => storage_path('app/public'),
],
您应该将其更改为您的主机 public_html 路径,如下所示:
'links' => [
'/home/NAME/public_html/storage' => storage_path('app/public'),
],
您可以在主机根文件夹中找到“NAME”。
转到cPanel终端 cd 到您的项目文件。 通过 ls 命令,您可以看到命令行所在的根目录的子级。 运行命令:
php artisan storage:link
注意:在运行上述命令之前,您应该删除 public_html>storage 文件夹(如果存在)。