thinkphp6.0 上传功能

如果要实现上传功能,首先需要建立一个上传表单,具体如下:

<form action="http://localhost/tp6/public/upload"
enctype="multipart/form-data" method="post">
<input type="file" name="image">
<input type="submit" value="确定">
</form>

创建一个控制器 upload.php,并使用 Request::file 来获取:

//获取表单的上传数据
$file = Request::file('image');

使用 Filesystem::putfile()方法,来实现上传文件,并写入指定目录;
上传后返回的结果$info,可以输出当前上传文件的地址;

//目录在 runtime/storage/toppic/时间/文件
$info = Filesystem::putFile('topic', $file);

如果想更改上传文件的默认配置,在 config/filesystem.php 中:

'root' => app()->getRuntimePath() . 'storage',

默认规则下,上传的文件是以日期和微秒生成的方式:date;
生成的规则还支持另外两种方式:md5 和 sha1;

$info = Filesystem::putFile('topic', $file, 'md5');

批量上传,使用 image[]作为名称,并使用 foreach()遍历上传;

<input type="file" name="image[]">
<input type="file" name="image[]">
<input type="file" name="image[]">
$files = Request::file('image');
$info = [];
foreach ($files as $file) {
$info[] = Filesystem::putFile('topic', $file);
}
dump($info);

结合之前的验证器,我们写一个针对 upload 的独立验证;

//上传图片文件
$file = Request::file('image');
//编写上传规则,必须是上传文件,必须是 jpg.png.gif 后缀
$validate = Validate::rule([
'image' => 'file|fileExt:jpg,png,gif'
]);
//得到上传文件和规则比对
$result = $validate->check([
'image' => $file
]);
//通过输出地址,否则输出错误
if ($result) {
$info = Filesystem::putFile('topic', $file);
dump($info);
} else {
dump($validate->getError());
}

 

 

 

THE END
喜欢就支持一下吧
点赞13 分享