Laravel 5.1使用存储库将文件移动到公共文件夹

4

在我的Laravel API调用中,我使用Storage来上传文件。然后我想通过以下方式将文件重命名并移动到公共目录:

    $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包括起来,但是没有成功。


将 $dest = '/var/www/public/uploads/'; 修改为 $dest = 'uploads/'; - Vanya Avchyan
2个回答

7

如果你在config/filesystems.php里有一个数组['disks']['public'],那么你可以这样做:

Storage::disk('public')->move($oldfilename, $dest.$newImageName);

如果你没有创建一个看起来像这样的东西:
    'public' => [
        'driver'     => 'local',
        'root'       => storage_path( 'app/public' ),
        'visibility' => 'public',
    ],

然后,您将能够使用存储门面(storage facade)中的公共“disk”。

请注意,您不再需要指定绝对路径,Laravel 将知道存储路径为 "app/public"。

编辑

另一个可能起作用的配置选项:

    'public' => [
        'driver'     => 'local',
        'root'       => public_path(),
        'visibility' => 'public',
    ],

上面的代码将文件放在myappname/storage/public/目录下。我真正想做的是将文件放在myappname/public目录下,这是我们存储index.php和.robots.txt的地方。 - techwestcoastsfosea
1
如果答案不是你想要的,那么为什么你还要接受这个答案呢? - Ducky

0

这种方法适用于您的主机是cPanel且终端功能可用的情况。

首先进入您的config>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文件夹(如果存在)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接