laravel 上传文件

2020-01-09  本文已影响0人  苍松拔雨

1. 获取上传文件

Laravel 使用 Illuminate\Http\Request 的 file() 方法来获取用户上传的文件 ,返回 Symfony\Component\HttpFoundation\File\UploadedFile 实例

$request->file('photo');
// 或者
$request->photo;

2. 验证上传文件

验证上传文件要分两步 ,首先验证用户是否有上传文件 ,如果有再验证文件是否上传成功

if ($request->hasFile('file') && $request->file('file')->isValid()) {
    // isValid() 在文件自身上调用 ,如果没有上传文件就调用会产生报错 , 因此先使用 hasFile() 检测是否有上传文件
}

3. Symfony\Component\HttpFoundation\File\UploadedFile 成员

// 继承关系
Symfony\Component\HttpFoundation\File\UploadedFile extends Symfony\Component\HttpFoundation\File\File;

下列方法名中带有 Client 的 ,表示相关信息是从请求中提取 ,因此未必可信

成员 说明 示例
getClientOriginalName() 返回上传文件的原始名称 -
getClientOriginalExtension() 返回上传文件的后缀名 -
getClientMimeType() 返回上传文件的 MIME 类型 -
guessClientExtension() 返回上传文件的后缀名 -
getClientSize() 返回上传文件的字节大小 -
getError() 返回上传文件的错误信息 ,成功返回 UPLOAD_ERR_OK 常量 ,失败返回 UPLOAD_ERR_XXX 系列的其他常量 -
isValid() 验证文件是否成功上传 -
move(directory,name = null) 将上传移动到 directory +name( 如果有 ) -
getMaxFilesize() 返回 php.ini 中 upload_max_filesize 配置的值 -
getErrorMessage() 返回上传文件产生的错误信息 -

错误常量和错误信息

/**
 * Returns an informative upload error message.
 *
 * @return string The error message regarding the specified error code
 */
public function getErrorMessage()
{
    static $errors = array(
        UPLOAD_ERR_INI_SIZE => 'The file "%s" exceeds your upload_max_filesize ini directive (limit is %d KiB).',
        UPLOAD_ERR_FORM_SIZE => 'The file "%s" exceeds the upload limit defined in your form.',
        UPLOAD_ERR_PARTIAL => 'The file "%s" was only partially uploaded.',
        UPLOAD_ERR_NO_FILE => 'No file was uploaded.',
        UPLOAD_ERR_CANT_WRITE => 'The file "%s" could not be written on disk.',
        UPLOAD_ERR_NO_TMP_DIR => 'File could not be uploaded: missing temporary directory.',
        UPLOAD_ERR_EXTENSION => 'File upload was stopped by a PHP extension.',
    );
    $errorCode = $this->error;
    $maxFilesize = $errorCode === UPLOAD_ERR_INI_SIZE ? self::getMaxFilesize() / 1024 : 0;
    $message = isset($errors[$errorCode]) ? $errors[$errorCode] : 'The file "%s" was not uploaded due to an unknown error.';
    return sprintf($message, $this->getClientOriginalName(), $maxFilesize);
}

4. Symfony\Component\HttpFoundation\File\File 成员

// SplFileInfo 是 PHP 的原生类
Symfony\Component\HttpFoundation\File\File extends \SplFileInfo;
成员 说明 示例
guessExtension() 根据文件的 MIME 类型返回文件后缀名 ,失败返回 null -
getMimeType() 返回文件的 MIME 类型 -
上一篇 下一篇

猜你喜欢

热点阅读