php - symfony 4 上传文件时出错
问题描述
我正在尝试上传文件,非常遵循Symfony 食谱上的说明,但它似乎不起作用。
具体错误如下,但背景原因是文件本身似乎没有(或保持)上传。
调用字符串上的成员函数guessExtension()
碰巧的是,该文件暂时在upload_tmp_dir创建,但几乎立即被删除(我知道,因为我保持该目录在我的Finder上可见)。
文件元数据在下面脚本的 var_dump($_FILES) 命令中可用。
因此,由于某种原因,该文件被丢弃,我相信这会导致上面看到的特定错误。
我相信 $file (来自 UploadedFile )应该接收文件,而不是它的路径,但不知道如何到达那里。特别是文件不会保留在upload_tmp_dir 上。
有关信息,我尝试在我拥有的普通 PHP 项目中上传,它工作正常。该文件保留在 upload_tmp_dir 中,直到移动到其他地方。
谢谢
这是控制器:
class ApiUserXtraController extends Controller
{
public function UserXtraAction(Request $request, ValidatorInterface $validator) {
$is_logged = $this->isGranted('IS_AUTHENTICATED_FULLY');
if ($is_logged) {
$user = $this->getUser();
}
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository(UserXtra::class);
$userxtra = new UserXtra();
$form = $this->createFormBuilder($userxtra)
->add('imgFile', FileType::class, array('label' => 'file'))
->add('save', SubmitType::class, array('label' => 'Create Task'))
->getForm();
var_dump($_FILES); // outputs file metadata, ie, name, type, tmp_name, size
$form->handleRequest($request);
$userxtra->setUser($user);
if ($form->isSubmitted() && $form->isValid()) {
/**
* @var UploadedFile $file
* */
$file = $userxtra->getImgFile();
var_dump('file', $file);// outputs full path to upload_tmp_dir
$fileName = $this->generateUniqueFileName().'.'.$file->guessExtension(); // **THIS THROWS THE ERROR**
$file->move(
$this->getParameter('user_image_directory'),
$fileName
);
$userxtra->setImgFile($fileName);
//$data = json_decode($data);
return new JsonResponse(array(
'status' => 'ok',
'is_logged' => $is_logged,
));
}
return $this->render('upload.html.twig', array(
'form' => $form->createView(),
));
}
解决方案
我找到了关于这个 SO question的解决方案。
文档,或者实际上是 Symfony 的食谱,是错误的。
我的代码上面的那行说明:
$file = $userxtra->getImgFile();
应该:
$file = $form->get('imgFile')->getData();
推荐阅读
- javascript - 使用 Javascript 调整字体大小并适合 div
- php - 在php中上传多张图片的最快方法
- c++ - 使用 C++ 应用程序加载 dll
- java - 使用 JFX11 创建 jar 工件会导致非自动执行的 jar
- python - Tensorflow:使用 2D 输入数组和标量输出进行回归
- python - 具有重复元素的列表的 Python deepcopy
- spring - org.springframework.jdbc.support.MetaDataAccessException:Spring Boot 中的 JDBC DatabaseMetaData 方法
- rest - 如何在 SOAPUI 中更改模拟服务的端口号
- java - Java:不使用 AWT 在浏览器中打开 URL
- r - 将所有 Excel 文件按表读取到 R 中,文件名作为列