You can rename the file names in Magento by providing the source path and destination path.
I have tested the given functionality to rename the file names under the pub directory. You can do it for outside pub directory but you need to change __construct() method $this->directory argument value.
$this->directory = $filesystem->getDirectoryWrite(DirectoryList::PUB);
I have explicitly given PUB directory so it will be renamed the file inside the pub directory only.
Let’s say we have to rename the XML file sitemap.xml from the path /pub/media/sitemap/sitemap.xml to other file names.
Target Path: media/sitemap/sitemap.xml
Resource Path: media/sitemap/demo.xml
Class Magento\Framework\Filesystem\Directory\Write having renameFile() that method will be used to rename file names.
renameFile() contains the First argument as $path and the Second argument is the $newPath.
I have created a sample Model class to rename the filename,
<?php
declare(strict_types=1);
namespace Rbj\Blog\Model;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Filesystem\Directory\Write;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Filesystem;
class RenameFile
{
private Filesystem $filesystem;
/** @var Write */
private $directory;
public function __construct(
Filesystem $filesystem,
) {
$this->filesystem = $filesystem;
$this->directory = $filesystem->getDirectoryWrite(DirectoryList::PUB);
}
public function renameFile()
{
$path = 'media/sitemap/sitemap.xml';
$destination = 'media/sitemap/demo.xml';
try {
$this->directory->renameFile($path, $destination);
} catch (\Exception $e) {
throw new LocalizedException(
__('Something went wrong while rename the file.'),
$e
);
}
}
}
Use the above class and you will be able to successfully rename any files.
