在上传文件时,我们可以限定上传文件的大小,也可以限定上传文件的类型(如:只能上传jpg, gif格式),另外上传到服务器的文件名不要随机生成,由我们来指定。
模板文件代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加学生</title>
</head>
<body>
<form action="{:url('upload')}" enctype="multipart/form-data" method="post">
<div>学号:<input type="text" name="no"></div>
<div>姓名:<input type="text" name="name"></div>
<div>性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女</div>
<div>年龄:<input type="text" name="age"></div>
<div>照片:<input type="file" name="file"/></div>
<div><input type="submit" value="提交"/></div>
</form>
</body>
</html>
控制器代码:
<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
use think\Exception;
class Upload extends Controller
{
//显示页面
public function index()
{
return $this->fetch();
}
//上传文件
public function upload()
{
$no = input('post.no');
$name = input('post.name');
$sex = input('post.sex');
$age = input('post.age');
$file = request()->file('file');
if(empty($file)){
$this->error('没有上传文件或者上传文件超过' . ini_get('upload_max_filesize'));
}
//获取上传文件的原文件名
$oldfilename = $file->getInfo()['name'];
//获取上传文件的扩展名
$ext = strrchr($oldfilename,'.');
//使用学号做为新文件名
$newfilename = $no . $ext;
$info = $file->validate(['ext'=>'jpg,png,gif'])->move(ROOT_PATH . 'public' . DS . 'uploads' ,$newfilename);
if($info){
$data = [
'no'=>$no,
'name'=>$name,
'sex'=>$sex,
'age'=>$age,
'photo'=>'/public/uploads/' . $newfilename
];
try{
Db::name('student')->insert($data);
echo '提交成功';
}catch (Exception $ex){
$this->error('提交失败');
}
}else{
$this->error('上传文件失败' . $file->getError());
}
}
}
数据表结构:
学生信息中包括学生的照片,所以要上传照片(文件),并且把照片存放的路径要写入到记录中。
保存在服务器public/uploads目录中的照片文件使用的是学号