第5集:Webman文件上传

1、获取上传文件:

获取整个上传文件数组($request->file();)

<!-- 表单代码 -->
<form method="post" action="http://127.0.0.1:8787/upload/files" enctype="multipart/form-data" />
<input name="file1" multiple="multiple" type="file">
<input name="file2" multiple="multiple" type="file">
<input type="submit">
</form>
// $request->file()返回的格式
array (
'file1' => object(webman\Http\UploadFile),
'file2' => object(webman\Http\UploadFile)
)

a.他是一个webman\Http\UploadFile实例的数组。

b.webman\Http\UploadFile类继承了 PHP 内置的 SplFileInfo 类,并且提供了一些实用的方法。

<?php
namespace app\controller;
use support\Request;
class UploadController
{
  public function files(Request $request)
  {
    foreach ($request->file() as $key => $spl_file) {
    var_export($spl_file->isValid()); // 文件是否有效,例如ture|false
    var_export($spl_file->getUploadExtension()); // 上传文件后缀名,例如'jpg'
    var_export($spl_file->getUploadMineType()); // 上传文件mine类型,例如 'image/jpeg'
    var_export($spl_file->getUploadErrorCode()); // 获取上传错误码,例如 UPLOAD_ERR_NO_TMP_DIR UPLOAD_ERR_NO_FILE UPLOAD_ERR_CANT_WRITE
    var_export($spl_file->getUploadName()); // 上传文件名,例如 'my-test.jpg'
    var_export($spl_file->getSize()); // 获得文件大小,例如 13364,单位字节
    var_export($spl_file->getPath()); // 获得上传的目录,例如 '/tmp'
    var_export($spl_file->getRealPath()); // 获得临时文件路径,例如 `/tmp/workerman.upload.SRliMu`
    }
    return response('ok');
  }
}

注意:

a.文件被上传后会被命名为一个临时文件,类似 /tmp/workerman.upload.SRliMu

b.上传文件大小受到defaultMaxPackageSize限制,默认10M,可在config/server.php文件中修改max_package_size更改默认值。

c.请求结束后临时文件将被自动清除

d.如果请求没有上传文件则$request->file()返回一个空的数组

e.上传的文件不支持 move_uploaded_file() 方法,请使用 $file->move()方法代替。

2、获取特定上传文件:

$request->file(‘avatar’);

如果文件存在的话则返回对应文件的webman\Http\UploadFile实例,否则返回null。

<?php
namespace app\controller;
use support\Request;
class UploadController
{
  public function file(Request $request)
  {
    $file = $request->file('avatar');
    if ($file && $file->isValid()) {
    $file->move(public_path().'/files/myfile.'.$file->getUploadExtension());
    return json(['code' => 0, 'msg' => 'upload success']);
    }
    return json(['code' => 1, 'msg' => 'file not found']);
  }
}

正文完
 0