在Laravel中如何获取不带扩展名的文件名?

56

我已经使用了Input::file('upfile')->getClientOriginalName()获取上传文件的名称,但它会返回带有扩展名的名称,例如qwe.jpg。在Laravel中,如何获取不带扩展名的名称,例如qwe


这回答解决了你的问题吗?如何在PHP中获取(提取)文件扩展名? - miken32
13个回答

91

Laravel使用Symfony UploadedFile组件,该组件将由Input::file()方法返回。

它没有任何获取文件名的方法,因此您可以使用php原生函数pathinfo():

pathinfo(Input::file('upfile')->getClientOriginalName(), PATHINFO_FILENAME);

1
如果有$request,代码应该为'$filename = pathinfo($request->file('import_file')->getClientOriginalName(), PATHINFO_FILENAME);',而不是使用Input模型。 - Nuwan Withanage

62

你可以尝试这个

$file = Input::file('upfile')->getClientOriginalName();

$filename = pathinfo($file, PATHINFO_FILENAME);
$extension = pathinfo($file, PATHINFO_EXTENSION);

echo $filename . ' ' . $extension; // 'qwe jpg'

18

在 Laravel 5.2 中

使用 Request,它已经存在于 app 文件中的 aliases 数组中

要获取原始文件名

$request->file('upfile')->getClientOriginalName();
获取不带扩展名的文件名
basename($request->file('upfile')->getClientOriginalName(), '.'.$request->file('upfile')->getClientOriginalExtension());

15

11

这里需要调用 PHP 的 PATHINFO_FILENAME。

$file = $request->file('fileupload')->getClientOriginalName();
$fileName = pathinfo($file,PATHINFO_FILENAME);
dd($fileName);

8
在 Laravel 7 中引入了流畅字符串 (Fluent Strings),可以以一种极其优雅的方式进行操作。 basename 方法将返回给定字符串的尾部名称组件。
use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz.jpg')->basename();

// 'baz.jpg'

如有必要,您可以提供一个“扩展名”,该扩展名将从尾部组件中删除:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz.jpg')->basename('.jpg');

// 'baz'

4
你也可以使用这段代码。
    if ($request->hasfile('filename')) {
        $image = $request->filename;
        $namewithextension = $image->getClientOriginalName(); //Name with extension 'filename.jpg'
        $name = explode('.', $namewithextension)[0]; // Filename 'filename'
        $extension = $image->getClientOriginalExtension(); //Extension 'jpg'
        $uploadname = time() . '.' . $extension;
        $image->move(public_path() . '/uploads/', $uploadname);
    }

2
如果我的文件名是“natural.picture.png”,那么它可以工作吗? - Yagnesh bhalala
我测试了你的代码,它运行良好。生成新名称并正确保存扩展名的代码都没问题。顺便说一下,我正在使用 Laravel 5.7。 - Mete YILMAZ
我知道这是一个旧的线程,但是如果使用natural.picture.png,那么name将返回为natural,并且最终将使用time()保存文件。 - Rio A.P

3

我在 Laravel 5.2.* 中使用这段代码并成功运行:

$file=$request->file('imagefile');
$imgrealpath= $file->getRealPath(); 
$nameonly=preg_replace('/\..+$/', '', $file->getClientOriginalName());
$fullname=$nameonly.'.'.$file->getClientOriginalExtension();

3

使用getClientOriginalName()函数获取文件名;然后使用explode函数获取名称和图像格式,如下所示:

$image=Input::file('image'); $fullName=$image->getClientOriginalName(); $name=explode('.',$fullName)[0];


2

试试这个:

    $fullName = Input::file('image')->getClientOrginalName();
    $extension = Input::file('image')->getClientOrginalExtension();
    $onlyName = explode('.'.$extension,$fullName);

或者这个:
    $fullName = Input::file('image')->getClientOrginalName();
    $extension = Input::file('image')->getClientOrginalExtension();

    $fullNameLenght = strlen($fullName);
    $extensionLenght = strlen($extension);
    $nameLength = $fullNameLenght - ($extensionLength + 1);
    $onlyName = strpos($fullName, 0, $nameLength);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接