我目前在从 Symfony 6.4.3 应用程序上传 PDF 文件时遇到问题。事实上,我成功地使用UploadedFile上传了PDF文件,并且我发现这些文件正确地存储在指定目录“public/pdf/”中。但是,在没有管理权限的情况下尝试打开或删除这些 PDF 文件时,我遇到了困难。这是在我的应用程序中导致问题的唯一文件夹,因为我在其他目录中上传 .json 或 .txt 文件没有任何问题。
以下是我的代码摘录:
<?php
//src/Controller/AwsExtractController.php
namespace App\Controller;
use App\Entity\AwsPdfDocument;
use App\Form\AwsPdfDocumentFormType;
use App\Service\FileUploader;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
class AwsExtractController extends AbstractController
{
public function __construct()
{}
/**
* @Route("/documents/scan", name="scan_documents")
* Fonction permettant de transférer les documents dans le
* bucket S3, puis d'analyser ces documents avec AWS Textract.
*
* 3 Requêtes AWS
*
* @param Request $request
* @param EntityManagerInterface $entityManager
*
* @return Response
*/
public function index(Request $request, EntityManagerInterface $entityManager, FileUploader $fileUploader)
{
$form = $this->createForm(AwsPdfDocumentFormType::class);
$form->handleRequest($request);
$analysedPdfs = $entityManager->getRepository(AwsPdfDocument::class)->findAll();
if ($form->isSubmitted() && $form->isValid())
{
$files = $form->get('files')->getData();
if ($files)
{
foreach ($files as $file)
{
//PROBLEM
$fileName = $fileUploader->upload($file);
dd("end");
}
}
}
return $this->render(
'aws/aws_scan_document/index.html.twig',
[
'form' => $form->createView(),
]
);
}
}
<?php
// src/Service/FileUploader.php
namespace App\Service;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\String\Slugger\SluggerInterface;
class FileUploader
{
public function __construct(
private string $targetDirectory,
private SluggerInterface $slugger,
) {
}
public function upload(UploadedFile $file): string
{
$originalFilename = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $this->slugger->slug($originalFilename);
$fileName = $safeFilename . '-' . uniqid() . '.' . $file->guessExtension();
try
{
$file->move($this->getTargetDirectory(), $fileName);
} catch (FileException $e) {
// ... handle exception if something happens during file upload
}
return $fileName;
}
public function getTargetDirectory(): string
{
return $this->targetDirectory;
}
}
我正在使用:
到目前为止,我已经尝试过更改PDF文件的保存目录,但没有任何区别。我也尝试过手动更改目录和文件的权限,但仍然没有成功。接下来,我注释掉了用于上传文件的 Symfony 代码,并将其替换为纯 PHP 代码,但这也没有产生任何结果。最后,我创建了一个运行 Windows 10 的虚拟机,部署了应用程序,它工作了,但我不确定为什么以及如何工作。
我想向所有花时间帮助我的人表示诚挚的谢意。您愿意提供帮助是宝贵的,我们非常感激。无论是回答我的问题、分享建议还是提出解决方案,每一次贡献对我来说都非常有价值。
CSI Devops RPZ,这是 Boulangers 的最佳作品