sftpbrowser/src/Controller/HomeController.php

110 lines
3.4 KiB
PHP
Raw Normal View History

2022-12-23 16:27:07 +01:00
<?php
namespace App\Controller;
use App\Form\FolderType;
use App\Form\FileType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use App\Service\SftpService;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
class HomeController extends AbstractController
{
private $sftp;
public function __construct(SftpService $sftp)
{
$this->sftp = $sftp;
$this->sftp->connect();
}
public function home(Request $request)
{
$folder=$request->query->get('folder');
// Crétion de répertoire
$formFolder = $this->createForm(FolderType::class);
$formFolder->handleRequest($request);
if ($formFolder->get('submit')->isClicked() && $formFolder->isValid()) {
$name = $formFolder->get("name")->getData();
$this->sftp->mkdir($folder."/".$name);
}
// Modification de fichier
$formFile = $this->createForm(FileType::class);
$formFile->handleRequest($request);
if ($formFile->get('submit')->isClicked() && $formFile->isValid()) {
$oldname = $formFile->get("oldname")->getData();
$name = $formFile->get("name")->getData();
$this->sftp->rename($folder."/".$oldname,$folder."/".$name);
}
// Lister les fichiers
$ls=$this->sftp->ls($folder);
// Construire l'arbre des répertoires
$tree=[];
$tmpparent=explode("/",$folder);
foreach($tmpparent as $key => $parent) {
$tmp=[
"name"=>($parent==""?"Home":$parent),
"folder"=>($key==0?"":$tree[$key-1]["folder"]."/".$parent)
];
array_push($tree,$tmp);
}
// Browse
return $this->render('Home/home.html.twig', [
'useheader' => true,
'usemenu' => false,
'usesidebar' => false,
'tree' => $tree,
'infolder' => $folder,
'folders' => $ls["folders"],
'files' => $ls["files"],
'formfolder'=>$formFolder->createView(),
'formfile'=>$formFile->createView(),
]);
}
public function download(Request $request)
{
$file=$request->query->get('file');
$tmpfile=$this->sftp->downloadFile($file,"var/tmp/");
if(!$tmpfile) {
throw new \Exception('Erreur de téléchargement');
}
if (str_starts_with(mime_content_type($tmpfile), 'image/') || 'application/pdf' == mime_content_type($tmpfile)) {
$response = new BinaryFileResponse($tmpfile);
$response->headers->set('Content-Type', mime_content_type($tmpfile));
} else {
$response = new BinaryFileResponse($tmpfile);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, basename($tmpfile));
}
return $response;
}
public function upload(Request $request)
{
$folder=$request->query->get('folder');
return $this->render('Home/upload.html.twig', [
'folder' => $folder,
]);
}
public function delete(Request $request)
{
$folder=$request->query->get('folder');
$file=$request->query->get('file');
$this->sftp->deleteFile($file);
return $this->redirectToRoute("app_home",["folder"=>$folder]);
}
}