在Laravel 5.5中移动文件夹

时间:2017-12-05 12:09:03

标签: laravel-5

方案

我试图允许用户在laravel 5.5中移动文件夹,但是Laravels站点没有用于移动文件夹的文件的示例代码。我在其他地方看了一遍,在stackoverflow和其他地方遇到了几个其他答案,并尝试了所有这些。

Laravel move all files directory

https://laracasts.com/discuss/channels/laravel/laravel-cannot-use-movedirectory-and-copydirectory-problem

Laravel, unable to copyDirectory or moveDirectory

当我尝试移动文件夹时,我在Devtools中得到了这个回复:

0:"I want to move this /public/Gallery"
1:"To here /public/Images"
2:false

从后端的这段代码

$item ['path' => '/public/Gallery']
$path = '/public/Images'
$success = File::moveDirectory($item['path'], $path);
return [
    "I want to move this ".$item['path'],
    "To here $path",
    $success,
];

早些时候,我得到了一个回复,说文件已经存在,虽然它没有,但我从来没有能够复制它。

修改

使用Storage::move()我能够复制'已存在的错误'

exception:"League\Flysystem\FileExistsException"
file:"C:\Users\user.name\Desktop\electron-api\vendor\league\flysystem\src\Filesystem.php"
line:402
message:"File already exists at path: public/Images"

问题

如何在laravel 5存储中移动文件夹,而不是文件。最好使用存储外观。

2 个答案:

答案 0 :(得分:0)

文件和目录大多是相同的东西,移动会将它们视为相同。 您可以创建指向public的本地磁盘,以便更容易使用公共目录

Storage::move($item['path'], $path);

移动功能就像bash mv命令一样,它实际上只是一个重命名。 2个目录不能具有相同的名称。所以要先删除public / Images /或将内容合并到public / Images并删除public / Gallery

如果您希望将目录移动到$ path,则必须将目录名称放在路径的末尾

Storage::move($item['path'], $path.'/Gallery');

这将创建' / public / Images / Gallery'

答案 1 :(得分:0)

感觉非常愚蠢是错误地使用了Method,因为我没有看到它明确地引用了你必须在“move from”和“move to”目录中包含文件夹名称的任何地方,我一直在这样做:

Storage::move('Folder', 'OtherFolder');

但这不起作用,我需要这样做

Storage::move('Folder', 'OtherFolder/Folder');

移动到OtherFolder的文件夹仍然需要命名为文件夹,因此名称需要在末尾追加,laravel没有抛出任何特定的错误,这些错误让我能够理解我做错了什么。

希望将来有人像我一样愚蠢。