【问题标题】:Get an image extension from an uploaded file in Laravel从 Laravel 中上传的文件中获取图像扩展名
【发布时间】:2016-07-15 19:13:14
【问题描述】:

我一直在尝试从上传的文件中获取扩展名,在谷歌上搜索,我没有得到任何结果。

文件已存在于路径中:

\Storage::get('/uploads/categories/featured_image.jpg);

现在,我怎样才能得到上面这个文件的扩展名?

使用输入字段我可以得到这样的扩展:

Input::file('thumb')->getClientOriginalExtension();

谢谢。

【问题讨论】:

  • getClientOriginalExtension() 得到错误的扩展名(用户可以发送带有 png 扩展名的 jpeg),所以每次你宁愿使用 ->extension() 方法 - UploadedFileFile 都没有关系有同样的方法。

标签: php laravel filesystems


【解决方案1】:

在 laravel 5.5 中测试

$extension = $request->file('file')->extension();

【讨论】:

  • 感谢您抽出宝贵时间提供答案。正是因为像您这样乐于助人的同龄人,我们才能作为一个社区一起学习。以下是一些关于如何使您的答案出色的提示:How do I write a good answer
  • 这是最好的遮阳篷。适用于 Laravel 5.3+
  • 有点烦人的是,它基于 mime 类型,因此如果扩展名为 jpg,则返回 jpeg
  • @Surya 那有什么问题?
  • @HashimAziz 这意味着如果你试图找到一个名为 filename.jpg 的文件,你将找不到它,因为它会寻找 filename.jpeg
【解决方案2】:

您可以为此使用 PHP 内置的 pathinfo() 函数:

$info = pathinfo(storage_path().'/uploads/categories/featured_image.jpg');
$ext = $info['extension'];

或者更简洁,可以通过一个选项get直接获取;

$ext = pathinfo(storage_path().'/uploads/categories/featured_image.jpg', PATHINFO_EXTENSION);

【讨论】:

    【解决方案3】:

    Laravel 方式

    试试这个:

    $foo = \File::extension($filename);
    

    【讨论】:

    • 谢谢,@Alfredo EM。我试过但只是得到“”。上面的解决方案效果很好。
    • $extension = \File::extension('/uploads/categories/featured_image.jpg') 真的不行 =( ?
    • 复制粘贴 \File::extension('/uploads/categories/featured_image.jpg') ;并将返回 jpg
    【解决方案4】:

    如果你只是想要扩展,你可以使用pathinfo:

    $ext = pathinfo($file_path, PATHINFO_EXTENSION);
    

    【讨论】:

      【解决方案5】:

      另一种方法:

      //Where $file is an instance of Illuminate\Http\UploadFile
      $extension = $file->getClientOriginalExtension();
      

      【讨论】:

      • 这是 laravel v 5
      • 危险:这会获取 CLIENT 扩展名,而不是真正的 mime 类型扩展名,以使用 extension() 代替
      【解决方案6】:
      return $picName = time().'.'.$request->file->extension();
      

      time() 函数将使图像独一无二,然后.$request->file->extension() 为您获取图像扩展名。

      您可以使用它,它适用于 Laravel 6 及更高版本。

      【讨论】:

        【解决方案7】:

        做这样的事情:

        if($request->hasFile('video')){
        
            $video=$request->file('video');
            $filename=str_random(20).".".$video->extension(); 
            $path = Storage::putFileAs(
                    '/', $video, $filename
             );
            $data['video']=$filename;
         }
        

        【讨论】:

          【解决方案8】:
           //working code from laravel 5.2
          
           public function store(Request $request)
           {
                    $file = $request->file('file');
                      if($file)
                      {
                              $extension =  $file->clientExtension();
                      }
                      echo $extension;
           }
          

          【讨论】:

            【解决方案9】:

            或者可以使用https://github.com/secrethash/tricksterExtension SplitterTrickster::getExtention()功能

            Trickster::getExtention('some-funny.image.jpg'); 它返回jpg

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-10-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-13
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多