【问题标题】:Access $_FILE['tmp_name'] from the UploadedFile class?从 UploadedFile 类访问 $_FILE['tmp_name']?
【发布时间】:2014-06-18 00:26:56
【问题描述】:

如果我打印 UploadedFile 实例的内容,这就是我得到的

array (
  'opt_image_header' => 
     Symfony\Component\HttpFoundation\File\UploadedFile::__set_state(array(
       'test' => false,
       'originalName' => 'triangle-in-the-mountains.jpg',
       'mimeType' => 'image/jpeg',
       'size' => 463833,
       'error' => 0,
)

这就是我在控制器中获取上传文件的方式。在移动它之前,我应该调整它的大小。

  foreach($request->files as $uploadedFile){

      $ext = '.' . $uploadedFile['opt_image_header']->guessExtension();
      $filename = sha1(uniqid(mt_rand(), true)) . $ext;

      $uploadedFile['opt_image_header']->move($path . '/images/', $filename);

  }

所以在保存之前我不需要调整图像大小的“tmp_name”。

我需要直接从 $_FILE 数组中读取它吗?

【问题讨论】:

    标签: image symfony upload


    【解决方案1】:

    使用$uploadedFile->getRealPath()

    Symfony\Component\HttpFoundation\File\UploadedFile扩展了Symfony\Component\HttpFoundation\File\File,它扩展了PHP的SplFileInfo,所以UploadedFile继承了SplFileInfo的所有方法。

    使用$uploadedFile->getRealPath() 作为文件的绝对路径。你也可以在上面使用其他方法,比如getFilename()或者getPathname()。有关可用方法的完整列表(SplFileInfo),请参阅the docs

    Symfony 的 File 类添加了一些额外的方法,例如 move()getMimeType(),并添加了对 getExtension() 的向后兼容性(这在 PHP 5.3.6 之前是不可用的)。 UploadedFile 在此基础上添加了一些额外的方法,例如 getClientOriginalName()getClientSize(),它们提供的信息与您通常从 $_FILES['name']$_FILES['size'] 获得的信息相同。

    【讨论】:

      【解决方案2】:

      如果您使用 Doctrine 上传文件,请查看 Symfony Documentation Upload a file
      如果你想上传一个没有 Doctrine 的文件,你可以试试这样的:

      foreach($request->files as $uploadedFile) {
          $filename = $uploadedFile->get('Put_Input_Name_Here')->getClientOriginalName();
          $file = $uploadedFile->move($distination_path, $filename);
      }
      

      如果上传文件有问题move()会抛出异常

      更新
      根据获取上传文件的临时路径来调整图像大小,您可以在上述循环中使用getPath()函数

      $tmp_name = $uploadedFile->get('Put_Input_Name_Here')->getPath();
      

      如果你问为什么,因为 Symfony File 类是扩展 SplFileInfo

      【讨论】:

      • 上传顺利,问题是我应该在上传之前调整它的大小。我会在普通 PHP 中加载 $_FILES['tmp_name'] 文件并调整它的大小。我想知道为什么 UploadedFile 中没有该属性的访问器
      • @Carlo 也许简单的解决方案是在上传后调整图像大小。您知道上传图像的目标路径,因此您可以对其应用更改。此外,您可以在config.yml 中定义一个临时上传路径,然后您将拥有上传文件的临时路径
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多