在 Laravel 5.5 中移动文件夹

Moving Folders in Laravel 5.5

情景

我试图允许用户在 laravel 5.5 中移动文件夹,但 Laravel 站点没有仅移动文件夹文件的示例代码。我在其他地方看了看,在 stackoverflow 和其他地方遇到了其他几个答案,并全部尝试了。

Laravel 移动所有文件目录

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

Laravel,无法复制目录或移动目录

当我尝试移动文件夹时,我在 Devtools 中收到此响应:

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

来自后端的这段代码

1
2
3
4
5
6
7
8
$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() 我能够复制"已经存在的错误"

1
2
3
4
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 存储中移动文件夹,而不是文件。最好使用 Storage Facade。


感觉真的很愚蠢,错误地使用了该方法,因为我没有看到它在任何地方显式引用,你必须在"move from"和"move to"目录中包含文件夹名称,我\\'一直在说:

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

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

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

被移动到 OtherFolder 的文件夹仍然需要命名文件夹,所以名称需要在末尾附加,laravel 没有抛出任何具体的错误,让我能够正确理解我做错了什么。

希望这对将来像我一样愚蠢的人有所帮助。


文件和目录大多是相同的东西,move 会将它们视为相同。
您可以创建一个指向公共的本地磁盘,以便更轻松地使用公共目录

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

move 函数的作用类似于 bash mv 命令,本质上只是一个重命名。 2 个目录不能具有相同的名称。所以要么先删除 public/Images/ 要么将内容合并到 public/Images 并删除 public/Gallery

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

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

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