如何使用symfony压缩文件

问题描述

上传一个文件,我想将其压缩,然后在base64中进行编码。上传进展顺利。但是当涉及到压缩时,我遇到了错误。 这是我的控制器

FileController.PHP

<?PHP

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Upload;
use App\Form\UploadType;
use Doctrine\Common\Persistence\ObjectManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\String\Slugger\SluggerInterface;

class FileController extends AbstractController
{
    /**
     * @Route("/home",name="accueil")
     */
    public function index(Request $request,EntityManagerInterface $manager,SluggerInterface $slugger)
    {

        $upload = new Upload();

        $form = $this->createForm(UploadType::class,$upload);

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid()) {
            $manager->persist($upload);
            $manager->flush();


            $uploadedFile = $form->get('document')->getData();

            $originalFilename = pathinfo($uploadedFile->getClientOriginalName(),PATHINFO_FILENAME);
            $safeFilename = $slugger->slug($originalFilename);
            $newFilename = $safeFilename.'-'.uniqid().'.'.$uploadedFile->guessExtension();
            
            
            try {
                $uploadedFile->move(
                    $this->getParameter('upload_directory'),$newFilename
                );
            } catch (FileException $e) {
                // ... handle exception if something happens during file upload
            }

            $zip = new \ZipArchive();
            if ($zip->open('doc1.zip',ZipArchive::CREATE) == TRUE)
            {
                // Add files to the zip file
                $zip->addFile($uploadedFile);
             
                // All files are added,so close the zip file.
                $zip->close();
            }
            // Get the file and convert into string 
            $zip_f = file_get_contents('doc1.zip'); 
                  
            // Encode the zip file string data into base64 
            $data = base64_encode($zip_f);  
                
            // display the output 
            echo $data; 


            $upload->setDocument($newFilename);
            return $this->redirectToRoute('accueil');

        }

        return $this->render('file/index.html.twig',array(
            'form' => $form->createView(),));
    }
}

这是我在运行它时收到的消息:

试图从名称空间“ App \ Controller”中加载类“ ZipArchive”。 您是否忘记了另一个名称间的“使用”语句?

解决方法

安装完成后,使用此代码检查您的ZipArchive类是否存在

var_dump(class_exists('ZipArchive')); 

如果返回true,则只需添加

use ZipArchive;

将其放在您的命名空间之后 然后输入这段代码

$zip = new ZipArchive();

要放在哪里