如何从存储方法中获取上传的图片名称

How to get the uploaded image name from the store method

当我通过以下操作将图像存储在 Laravel 中时:

$path = $request->file('myImage')->store('public/src/');

它 returns 是完整路径,但我如何才能只获取给定的文件名?

这是返回路径的示例:

public/src/ltX4COwEmvxVqX4Lol81qfJZuPTrQO6S2jsicuyp.png

在Laravel中,store()方法动态生成名称..所以你不能从store()方法中得到它。

但是你可以使用storeAs()方法。基本上 store() 方法调用 storeAs() 方法。所以:

$path = $request->file('myImage')->store('public/src');

Laravel 正在调用 ->storeAs('public/src', $request->file('myImage')->hashName()); .. 你看到 hashName() 方法了吗?这就是生成名称的原因。

所以你可以先打电话给 hashName() 并在存储发生之前知道你的名字..这是一个例子:

$uploadFile = $request->file('myImage');
$file_name = $uploadFile->hashName();
$path = $uploadFile->storeAs('public/src', $file_name);

现在你有 $file_name$path

参见:

在这里,你可以试试这个。

    $fileNameWithExt = $request->file('myImage')->getClientOriginalName();
    $fileNameWithExt = str_replace(" ", "_", $fileNameWithExt);

    $filename = pathinfo($fileNameWithExt, PATHINFO_FILENAME);
    $filename = preg_replace("/[^a-zA-Z0-9\s]/", "", $filename);
    $filename = urlencode($filename);

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

    $fileNameToStore = $filename.'_'.time().'.'.$extension;

    $path = $request->file('myImage')->storeAs('public/src/',$fileNameToStore);
    return $fileNameToStore;

您将在 $fileNameToStore 中获取您存储的文件名。 此外,所有空格都将替换为“_”,您将获得带有当前时间的存储文件名,这将帮助您区分两个同名文件。

由于 $path returns 保存文件的完整路径,它包含其生成的名称。 你只需要解析这个字符串:

$extension = explode('/', $path);
$filename = end($extension)

这会给你 ltX4COwEmvxVqX4Lol81qfJZuPTrQO6S2jsicuyp.png