栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP > php开源框架 > thinkphp

上传 - ThinkPHP5.0完全开发手册

thinkphp 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

上传 - ThinkPHP5.0完全开发手册

## 上传文件 `ThinkPHP5.0`对文件上传的支持更加简单。 > 内置的上传只是上传到本地服务器,上传到远程或者第三方平台的话需要自己扩展。 假设表单代码如下: ~~~ ~~~ 然后在控制器中添加如下的代码: ~~~ public function upload(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到框架应用根目录/public/uploads/ 目录下 if($file){ $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'); if($info){ // 成功上传后 获取上传信息 // 输出 jpg echo $info->getExtension(); // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg echo $info->getSaveName(); // 输出 42a79759f284b767dfcb2a0197904287.jpg echo $info->getFilename(); }else{ // 上传失败获取错误信息 echo $file->getError(); } } } ~~~ `move`方法成功的话返回的是一个`thinkFile`对象,你可以对上传后的文件进行后续操作。 ## 多文件上传 如果你使用的是多文件上传表单,例如: ~~~ ~~~ 控制器代码可以改成: ~~~ public function upload(){ // 获取表单上传文件 $files = request()->file('image'); foreach($files as $file){ // 移动到框架应用根目录/public/uploads/ 目录下 $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'); if($info){ // 成功上传后 获取上传信息 // 输出 jpg echo $info->getExtension(); // 输出 42a79759f284b767dfcb2a0197904287.jpg echo $info->getFilename(); }else{ // 上传失败获取错误信息 echo $file->getError(); } } } ~~~ ## 上传验证 支持对上传文件的验证,包括文件大小、文件类型和后缀: ~~~ public function upload(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到框架应用根目录/public/uploads/ 目录下 $info = $file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads'); if($info){ // 成功上传后 获取上传信息 // 输出 jpg echo $info->getExtension(); // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg echo $info->getSaveName(); // 输出 42a79759f284b767dfcb2a0197904287.jpg echo $info->getFilename(); }else{ // 上传失败获取错误信息 echo $file->getError(); } } ~~~ >[danger] `getSaveName`方法返回的是图片的服务器文件地址,并不能直接用于图片的URL地址,尤其在windows平台上必须做转换才能正常显示图片。 如果上传文件验证不通过,则`move`方法返回false。 |验证参数|说明| |---|---| |size|上传文件的最大字节| |ext|文件后缀,多个用逗号分割或者数组| |type|文件MIME类型,多个用逗号分割或者数组| > 还有一个额外的自动验证规则是,如果上传的文件后缀是图像文件后缀,则会检查该文件是否是一个合法的图像文件。 ## 上传规则 默认情况下,会在上传目录下面生成以当前日期为子目录,以微秒时间的`md5`编码为文件名的文件,例如上面生成的文件名可能是: ~~~ /home/www/upload/20160510/42a79759f284b767dfcb2a0197904287.jpg ~~~ 我们可以指定上传文件的命名规则,使用`rule`方法即可,例如: ~~~ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到服务器的上传目录 并且使用md5规则 $file->rule('md5')->move('/home/www/upload/'); ~~~ 最终生成的文件名类似于: ~~~ /home/www/upload/72/ef580909368d824e899f77c7c98388.jpg ~~~ 系统默认提供了几种上传命名规则,包括: |规则|描述| |---|---| |date|根据日期和微秒数生成| |md5|对文件使用md5_file散列生成| |sha1|对文件使用sha1_file散列生成| > 其中md5和sha1规则会自动以散列值的前两个字符作为子目录,后面的散列值作为文件名。 如果需要使用自定义命名规则,可以在`rule`方法中传入函数或者方法,例如: ~~~ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到服务器的上传目录 并且使用uniqid规则 $file->rule('uniqid')->move('/home/www/upload/'); ~~~ 生成的文件名类似于: ~~~ /home/www/upload/573d3b6d7abe2.jpg ~~~ 如果你希望保留原文件名称,可以使用: ~~~ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到服务器的上传目录 并且使用原文件名 $file->move('/home/www/upload/',''); ~~~ 默认情况下,会覆盖服务器上传目录下的同名文件,如果不希望覆盖,可以使用: ~~~ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到服务器的上传目录 并且设置不覆盖 $file->move('/home/www/upload/',true,false); ~~~ ## 获取文件hash散列值 可以获取上传文件的哈希散列值,例如: ~~~ // 获取表单上传文件 $file = request()->file('image'); // 移动到服务器的上传目录 并且使用原文件名 $upload = $file->move('/home/www/upload/'); // 获取上传文件的hash散列值 echo $upload->md5(); echo $upload->sha1(); ~~~ `v5.0.1`以上版本可以统一使用hash方法获取文件散列值 ~~~ // 获取表单上传文件 $file = request()->file('image'); // 移动到服务器的上传目录 并且使用原文件名 $upload = $file->move('/home/www/upload/'); // 获取上传文件的hash散列值 echo $upload->hash('sha1'); echo $upload->hash('md5'); ~~~ ## 返回对象 上传成功后返回的仍然是一个`File`对象,除了File对象自身的方法外,并且可以使用`SplFileObject`的属性和方法,便于进行后续的文件处理。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/213605.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号