问题描述
我上传了一个文件,我想将其压缩,然后在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();
要放在哪里