注意:SW-X内置的上传只是上传到本地服务器,上传到远程或者第三方平台的话需要自己扩展。
假设表单代码如下:
<form action="/index/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image" /> <br>
<input type="submit" value="上传" />
</form>
然后修改Index.php
控制器为如下的代码:
<?php
namespace app\http;
use x\controller\Http;
class Index extends Http
{
/**
* 输出视图
* @RequestMapping(route="/", method="get", title="主页")
*/
public function index() {
// 模板渲染
return $this->view('index');
}
/**
* @RequestMapping(route="index/upload", method="post", title="上传文件Demo")
*/
public function index() {
// 获取表单上传文件 例如上传了001.jpg
$file = $this->file('image');
// 移动到框架应用根目录/uploads/ 目录下
$info = $file->move(ROOT_PATH.'/uploads');
if($info){
// 成功上传后 获取上传信息
// 输出 保存的相对路径 /uploads/文件保存地址
echo $info->getSaveName();
// 输出 保存的文件名
echo $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
支持对上传文件的验证,包括文件大小、文件类型和后缀:
<?php
namespace app\http;
use x\controller\Http;
class Index extends Http
{
/**
* 输出视图
* @RequestMapping(route="/", method="get", title="主页")
*/
public function index() {
// 模板渲染
return $this->view('index');
}
/**
* @RequestMapping(route="index/upload", method="post", title="上传文件Demo")
*/
public function index() {
// 获取表单上传文件 例如上传了001.jpg
$file = $this->file('image');
// 移动到框架应用根目录/uploads/ 目录下
$info = $file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])->move(ROOT_PATH.'/uploads');
if($info){
// 成功上传后 获取上传信息
// 输出 保存的相对路径 /uploads/文件保存地址
echo $info->getSaveName();
// 输出 保存的文件名
echo $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
如果上传文件验证不通过,则move
方法返回false。
验证参数 | 说明 |
---|---|
size | 上传文件的最大字节 |
ext | 文件后缀,多个用逗号分割或者数组 |
type | 文件MIME类型,多个用逗号分割或者数组 |
SW-X对文件上传有默认配置,存放在/config/app.php
的file
节点下。
<?php
// +-----------------------------
// | 文件上传配置
// +-----------------------------
'file' => [
// 最大上传大小(KB)
'size' => 15678,
// 允许上传路径
'ext' => 'jpg,jpeg,png,gif',
// 保存目录不存在是否自动创建
'auto_save' => true,
// 文件名生成算法,支持sha1,md5,time三种
'name_algorithm' => 'time',
// 文件默认保存目录
'path' => ROOT_PATH.'/upload/',
],
系统默认提供了几种上传命名规则,包括:
规则 | 描述 |
---|---|
date | 根据日期和随机数生成 |
md5 | 对文件使用md5(time规则)散列生成 |
sha1 | 对文件使用sha1(time规则)散列生成 |
上传文件组件暂不支持多文件上传功能,但可以对$this->file($FILES['pic'][0])
的方式实现循环上传。
注意:在Swoole中默认文件最大上传限制只有2M
,我们除了修改框架的文件上传限制外,还需要修改server.php
配置文件中的package_max_length
选项。