上传文件

上传文件功能由 ginkgo\Upload 完成,内置的上传是指上传到本地服务器,上传到远程或者第三方平台请查看 杂项 -> FTP,或另行扩展。

假设表单代码如下:

  1. <form action="/index/index/upload" enctype="multipart/form-data" method="post">
  2. <input type="file" name="image"> <br>
  3. <input type="submit" value="上传">
  4. </form>

控制器定义如下

  1. namespace app\ctrl\index;
  2. use ginkgo\Upload;
  3. class Index {
  4. public function upload() {
  5. $upload = Upload::instance();
  6. // 获取表单上传文件 例如上传了 001.jpg
  7. $file = $upload->create('image');
  8. if ($file) {
  9. // 移动到框架应用根目录 /uploads/ 目录下
  10. if ($upload->move('../uploads/', '001.jpg')) {
  11. print_r($file);
  12. } else {
  13. echo $upload->getError();
  14. }
  15. } else {
  16. // 上传失败获取错误信息
  17. echo $upload->getError();
  18. }
  19. }
  20. }

create 方法在上传失败返回 false,上传成功返回一个数组,结构如下

  1. array(
  2. 'name' => '001.jpg', // 原始文件名
  3. 'tmp_name' => '/tmp/php3zU3t5', // 临时文件
  4. 'ext' => 'jpg', // 扩展名
  5. 'mime' => 'image/jpeg', // MIME
  6. 'size' => 31059, // 文件大小
  7. );

保存文件

move 方法说明

  1. function move( string $dir [, string $name = true [, bool $replace = false]] )

参数

  • dir 移动到指定目录

    建议使用完整路径

  • name 保存为指定文件名

    可能的值

    | 值 | 描述 | | - | - | | true(默认值) | 自动生成 | | false | 使用原文件名 | | 字符串 | 指定文件名 |

  • replace 是否覆盖

    如为 false,文件重名时将终止上传。


上传规则

默认情况下,会以微秒时间的 md5 编码为文件名,例如:

42a79759f284b767dfcb2a0197904287.jpg

我们可以指定上传文件的命名规则,使用 rule 方法即可,例如:

  1. $upload->rule('sha1')->move('../uploads/');

如果你希望保留原文件名称,可以使用

  1. $upload->move('../uploads/', false);

上传限制

上传限制可以通过配置文件定义

  1. 'var_extra' => array(
  2. 'upload' => array(
  3. 'limit_size' => 200, // 上传尺寸
  4. 'limit_unit' => 'kb', // 尺寸单位(kb、mb、gb)
  5. ),
  6. ...
  7. ),

也可以在实例化上传类时定义

  1. $config = array(
  2. 'limit_size' => 200, // 上传尺寸
  3. 'limit_unit' => 'kb', // 尺寸单位(kb、mb、gb)
  4. );
  5. $upload = Upload::instance($config);

还可以通过方法定义,方法定义必须在 create 方法执行之前。

限制文件 MIME 类型

  1. namespace app\ctrl\index;
  2. use ginkgo\Upload;
  3. class Index {
  4. public function upload() {
  5. $mime = array(
  6. 'gif' => array(
  7. 'image/gif',
  8. ),
  9. 'jpg' => array(
  10. 'image/jpeg',
  11. 'image/pjpeg'
  12. ),
  13. 'png' => array(
  14. 'image/png',
  15. 'image/x-png'
  16. ),
  17. );
  18. $upload = Upload::instance();
  19. $upload->setMime($mime);
  20. }
  21. }

限制文件大小

  1. namespace app\ctrl\index;
  2. use ginkgo\Upload;
  3. class Index {
  4. public function upload() {
  5. $upload = Upload::instance();
  6. $upload->setLimit(10989);
  7. }
  8. }

优先级:方法定义 > 初始化定义 > 配置文件定义