【发布时间】:2020-03-10 10:09:20
【问题描述】:
当我通过以下方式在 Laravel 中存储图像时:
$path = $request->file('myImage')->store('public/src/');
它返回完整路径,但我如何只获取它给出的文件名?
这是返回路径的示例:
public/src/ltX4COwEmvxVqX4Lol81qfJZuPTrQO6S2jsicuyp.png
【问题讨论】:
当我通过以下方式在 Laravel 中存储图像时:
$path = $request->file('myImage')->store('public/src/');
它返回完整路径,但我如何只获取它给出的文件名?
这是返回路径的示例:
public/src/ltX4COwEmvxVqX4Lol81qfJZuPTrQO6S2jsicuyp.png
【问题讨论】:
由于$path 返回已保存文件的完整路径,因此它包含其生成的名称。
你只需要解析这个字符串:
$extension = explode('/', $path);
$filename = end($extension)
这会给你ltX4COwEmvxVqX4Lol81qfJZuPTrQO6S2jsicuyp.png
【讨论】:
在这里,你可以试试这个。
$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 中获得您存储的文件名。 此外,所有空格都将替换为“_”,您将获得带有当前时间的存储文件名,这将帮助您区分两个同名文件。
【讨论】:
"/[^a-zA-Z0-9\s]/" 是什么意思?
在 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。
见:
【讨论】: