先看看THINKPHP默认的文件名生成方法
/**
* 自动生成文件名
* @access public
* @param string|\Closure $rule
* @return string
*/
public function hashName($rule = ''): string
{
if (!$this->hashName) {
if ($rule instanceof \Closure) {
$this->hashName = call_user_func_array($rule, [$this]);
} else {
switch (true) {
case in_array($rule, hash_algos()):
$hash = $this->hash($rule);
$this->hashName = substr($hash, 0, 2) . DIRECTORY_SEPARATOR . substr($hash, 2);
break;
case is_callable($rule):
$this->hashName = call_user_func($rule);
break;
default:
$this->hashName = date('Ymd') . DIRECTORY_SEPARATOR . md5(microtime(true) . $this->getPathname());
break;
}
}
}
return $this->hashName . '.' . $this->extension();
}
| 规则 | 描述 |
|---|---|
| date | 根据日期和微秒数生成 |
| md5 | 对文件使用md5_file散列生成 |
| sha1 | 对文件使用sha1_file散列生成 |
public function upload(){
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 接收示例一
// 上传到本地服务器 默认上传到runtime/storage目录下面生成以当前日期为子目录
$fileName = \think\facade\Filesystem::putFile( 'image', $file,'命名规则:如md5,date,sha1三种选其一,默认md5');
//接收示例二
// 如果是多应用的话,上传根目录默认是runtime/index/storage,如果你希望上传的文件是可以直接访问或者下载的话,可以使用public存储方式。
$fileName = \think\facade\Filesystem::disk('public')->putFile( 'image', $file,'命名规则:如md5,date,sha1三种选其一,默认md5');
}
可以通过自定义函数或闭包函数实现自定义上传文件名
闭包方式:
$FilePath = \think\facade\Filesystem::disk('public')->putFile($path, $file,function() use($file){
return date('Y/m/d') . DIRECTORY_SEPARATOR . md5(microtime(true) . $file->getPathname());
});
自定义函数
array('date', 'Ymd'), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
$FilePath = \think\facade\Filesystem::disk('public')->putFile($path, $file,array('date', 'Ymd'));
版权免责声明: 本站内容部分来源于网络,请自行鉴定真假。如有侵权,违法,恶意广告,虚假欺骗行为等以上问题联系我们删除。
本文地址:https://18793.cc/index/article/view/23.html