无法打开或重命名使用 Symfony 上传的 PDF 文件

问题描述 投票:0回答:1

我目前在从 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;
    }
}

  • When I open the PDF.
  • When I want to delete the PDF.
  • When I copy the PDF from 'public/pdf/' to 'My Documents' and want to delete it.

我正在使用:

  • PHP 8.1.27
  • 作曲家2.6.4
  • Symfony 网络服务器
  • Windows 10 专业版

到目前为止,我已经尝试过更改PDF文件的保存目录,但没有任何区别。我也尝试过手动更改目录和文件的权限,但仍然没有成功。接下来,我注释掉了用于上传文件的 Symfony 代码,并将其替换为纯 PHP 代码,但这也没有产生任何结果。最后,我创建了一个运行 Windows 10 的虚拟机,部署了应用程序,它工作了,但我不确定为什么以及如何工作。

我想向所有花时间帮助我的人表示诚挚的谢意。您愿意提供帮助是宝贵的,我们非常感激。无论是回答我的问题、分享建议还是提出解决方案,每一次贡献对我来说都非常有价值。

php symfony pdf permissions windows-10
1个回答
0
投票

CSI Devops RPZ,这是 Boulangers 的最佳作品

© www.soinside.com 2019 - 2024. All rights reserved.