下面是详细讲解“Thinkphp5 自定义上传文件名的实现方法”的完整攻略:
1. 简介
在Thinkphp5框架中,上传文件后一般会生成一个默认的文件名来保存上传文件。但是,有时我们希望自定义上传文件名,比如为了更好地管理文件或者为了更好地提供下载服务等。
本文将介绍如何在Thinkphp5中实现自定义上传文件名。
2. 实现方法
实现自定义上传文件名可以通过两种方式:一是利用Thinkphp5框架自带的UploadFile类,二是利用PHP的文件上传函数实现。
2.1 利用UploadFile类实现自定义上传文件名
-
- 在页面中添加file表单,并设置name属性。
<form method="post" action="<?php echo url('upload/upload'); ?>" enctype="multipart/form-data">
<input name="file" type="file" />
<button type="submit">上传</button>
</form>
-
- 在控制器中处理上传逻辑,利用UploadFile类实现自定义上传文件名。
public function upload()
{
$upload = new \think\Upload();
// 设置上传文件名规则
$upload->saveName = ['uniqid', ''];
$info = $upload->uploadOne($_FILES['file']);
if($info){
//上传成功后返回文件路径
return json(['code' => 200, 'msg' => '上传成功', 'data' => $info['savepath'].$info['savename']]);
}else{
//上传失败返回错误提示
return json(['code' => 400, 'msg' => $upload->getError()]);
}
}
上述代码中,我们创建了一个\think\Upload对象,然后设置了保存文件名的规则。在上传逻辑中,我们使用uploadOne方法实现文件上传,并在返回结果中带上了上传文件的路径。
在本例中,我们使用了uniqid函数作为文件名。uniqid函数会生成一个唯一的字符串作为文件名,第二个参数为空则表示没有前缀。具体的参数可以根据实际情况自行设置。
2.2 利用PHP的文件上传函数实现自定义上传文件名
如果我们不想使用Thinkphp5的UploadFile类,还可以利用PHP自带的文件上传函数实现自定义上传文件名。
-
- 在页面中添加file表单,并设置name属性。
<form method="post" action="<?php echo url('upload/upload'); ?>" enctype="multipart/form-data">
<input name="file" type="file" />
<button type="submit">上传</button>
</form>
-
- 在控制器中处理上传逻辑,利用PHP文件上传函数实现自定义上传文件名。
public function upload()
{
$file = request()->file('file');
// 设置上传文件名规则
$saveName = \think\helper\Str::uuid() . '.' . $file->getClientOriginalExtension();
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads', $saveName);
if($info){
//上传成功后返回文件路径
return json(['code' => 200, 'msg' => '上传成功', 'data' => $info->getPathName()]);
}else{
//上传失败返回错误提示
return json(['code' => 400, 'msg' => $file->getError()]);
}
}
上述代码中,我们首先通过request()->file('file')获取上传的文件对象。然后设置了保存文件名的规则。在上传逻辑中,我们使用move方法实现文件上传,并在返回结果中带上了上传文件的路径。
在本例中,我们使用了\think\helper\Str::uuid()作为文件名。该函数会生成一个唯一的uuid作为文件名,并且加上文件后缀名。具体的函数可以根据实际情况自行设置。
3. 总结
本文介绍了两种实现自定义上传文件名的方法:利用Thinkphp5框架自带的UploadFile类和利用PHP的文件上传函数。无论采用哪种方法,都可以方便快捷地实现上传文件名自定义。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Thinkphp5 自定义上传文件名的实现方法 - Python技术站