php - Symfony 4:从“dev”切换到“prod”时,无法将文件上传到文件夹
问题描述
我创建了一个函数,以便用户可以为文章/完成的项目上传文件。这些上传的图像将出现在网站的主页上。
当我尝试将文件上传到我的开发环境中的特定文件夹时,它可以工作。但是,如果我尝试在生产环境中上传文件,文件将不会移动到目标文件夹。有没有人有类似的问题/可以帮助我吗?
下面的代码是名为Artikel的实体(英文文章)Afbeeldingen ->英文图片
/**
* @ORM\Entity(repositoryClass="App\Repository\ArtikelRepository")
*/
class Artikel
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="array")
*/
private $afbeeldingen = [];
public function getAfbeeldingen()
{
return $this->afbeeldingen;
}
public function setAfbeeldingen(array $afbeeldingen): self
{
$this->afbeeldingen = $afbeeldingen;
return $this;
}
}
下面的代码是配置上传目录的services.yaml文件(images_directory)
parameters:
locale: 'en'
images_directory: '%kernel.project_dir%/www/uploads/artikelen'
下面的代码是Artikel实体的控制器,称为ArtikelController(英文为Article和ArticleController)
/**
* @Route("/admin/artikel/new", name="artikel_new", methods={"GET","POST"})
*/
public function new(Request $request): Response
{
$artikel = new Artikel();
$form = $this->createForm(ArtikelType::class, $artikel);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$articleImages = $form->get('afbeeldingen')->getData();
$images_directory = $this->getParameter('images_directory');
$afbeeldingen = array();
$teller = 0;
foreach ($articleImages as $articleImage) {
$originalFilename = pathinfo($articleImage->getClientOriginalName(), PATHINFO_FILENAME);
$filename = Urlizer::urlize($originalFilename) . '-' . uniqid() . '.' . $articleImage->guessExtension();
$afbeeldingen[$teller] = $filename;
$teller += 1;
try {
$articleImage->move($images_directory, $filename);
} catch (FileException $e) {
}
}
$artikel->setAfbeeldingen($afbeeldingen);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($artikel);
$entityManager->flush();
$this->addFlash('success', 'Artikel is aangemaakt.');
return $this->redirectToRoute('artikel_index');
}
return $this->render('artikel/new.html.twig', [
'artikel' => $artikel,
'form' => $form->createView(),
]);
}
如果有人可以帮助我,我会很高兴!提前致谢!
解决方案
“www”文件夹位于“public”文件夹之外。您无法访问公众以外的任何文件夹。
像这样设置 service.yaml 并重试并仔细检查文件系统权限。
'%kernel.project_dir%/public/uploads/artikelen'
推荐阅读
- android - 我如何在颤振中找回丢失的styles.xml文件
- android - 将变量值从状态传递到另一个小部件
- python - 如何在 python 中获得用户输入的函数的结果?
- flutter - 如何在 Flutter 中打开 ios 中的谷歌地图应用
- swiftui - List Section按项目数显示
- python-3.x - api_key 未在 Jupyter 笔记本中定义(youtube API v3)
- php - 如何将属于彼此的行分开
- c++ - C++,从单个输入行读取多个数字
- facebook - Watson Assistant - Facebook Messenger 中的选项响应类型
- amazon-web-services - 删除 AWS 云形成堆栈及其创建的资源