Skip to main content

Module upload

Module upload 

Source
Expand description

文件上传模块 — 对齐 PHP think\File + think\file\UploadedFile

本模块实现文件上传机制,对齐 PHP think\File 类 的 hash/move/hashName/extension/getMime 等核心方法,以及 think\file\UploadedFile 的 isValid/move/getOriginalName/getOriginalExtension 等方法。

§PHP 对齐

§核心类映射

PHP 类Rust 结构说明
think\File(extends SplFileInfoFile文件类
think\file\UploadedFile(extends FileUploadedFile上传文件类
think\exception\FileExceptionUploadError文件异常

§核心方法映射

PHP 方法Rust 方法说明
File::hash($type)File::hash获取文件哈希
File::md5()File::md5获取文件 MD5
File::sha1()File::sha1获取文件 SHA1
File::getMime()File::get_mime获取文件 MIME
File::move($dir, $name)File::move_to移动文件
File::extension()File::extension文件扩展名
File::setExtension($ext)File::set_extension设置扩展名
File::hashName($rule)File::hash_name生成哈希文件名
UploadedFile::isValid()UploadedFile::is_valid验证上传文件
UploadedFile::move($dir, $name)UploadedFile::move_to移动上传文件
UploadedFile::getOriginalMime()UploadedFile::original_mime原始 MIME
UploadedFile::getOriginalName()UploadedFile::original_name原始文件名
UploadedFile::getOriginalExtension()UploadedFile::original_extension原始扩展名
UploadedFile::extension()UploadedFile::extension覆写父类扩展名

§PHP 行为对齐(R5 硬约束)

  • R5-1hashName 默认规则 = date('Ymd') . DIRECTORY_SEPARATOR . md5(microtime(true) . pathname) (对齐 PHP 第 195 行)
  • R5-2hashName hash 算法规则 = substr(hash, 0, 2) . DIRECTORY_SEPARATOR . substr(hash, 2) (对齐 PHP 第 187-190 行)
  • R5-3UploadedFile::isValid = error == UPLOAD_ERR_OK && is_uploaded_file(pathname) (对齐 PHP 第 36-41 行)
  • R5-4UploadedFile::move 使用 move_uploaded_file(test 模式使用 rename) (对齐 PHP 第 50-75 行)
  • R5-5UploadedFile::getErrorMessage 错误码映射 (对齐 PHP 第 82-106 行)
  • R5-6UploadedFile::extension() 覆写父类,返回原始扩展名 (对齐 PHP 第 139-142 行)
  • R5-7File::getMime 使用 finfo_file(FILEINFO_MIME_TYPE) 对齐 Rust infer crate (对齐 PHP 第 88-93 行)
  • R5-8File::move 创建目录 mkdir(dir, 0777, true) + chmod(target, 0666 & ~umask()) (对齐 PHP 第 102-118 行)

§PHP 源码参考

  • e:\vue\test\鲜视达\server\vendor\topthink\framework\src\think\File.php
    • 第 22-46 行:类声明 + 构造方法
    • 第 54-61 行:hash($type) 方法
    • 第 88-93 行:getMime() 方法
    • 第 102-118 行:move($directory, $name) 方法
    • 第 126-139 行:getTargetFile($directory, $name) 方法
    • 第 146-153 行:getName($name) 方法
    • 第 159-162 行:extension() 方法
    • 第 169-172 行:setExtension($extension) 方法
    • 第 180-203 行:hashName($rule) 方法
  • e:\vue\test\鲜视达\server\vendor\topthink\framework\src\think\file\UploadedFile.php
    • 第 18-34 行:类声明 + 构造方法
    • 第 36-41 行:isValid() 方法
    • 第 50-75 行:move($directory, $name) 方法
    • 第 82-106 行:getErrorMessage() 方法
    • 第 112-142 行:getOriginalMime/Name/Extension + extension() 方法

Modules§

image
图像处理模块 — 对齐 PHP Grafika\Gd\Editor + Grafika\Gd\Image + Grafika\Color + Grafika\Position
storage
存储对接模块 — 对齐 PHP storage\Driver + storage\engine\*
validate
文件上传校验模块 — 对齐 PHP think\Validate 文件校验规则 + app\common\library\storage\Driver::validate

Structs§

File
文件类 — 对齐 PHP think\File(基于 SplFileInfo
MultipartResult
multipart 解析结果 — 对齐 PHP $_FILES + $_POST
UploadedFile
上传文件类 — 对齐 PHP think\file\UploadedFile

Enums§

HashAlgo
哈希算法 — 对齐 PHP hash_algos() 子集
HashNameRule
hashName 规则 — 对齐 PHP File::hashName($rule) 第 180-203 行
UploadErrCode
PHP UPLOAD_ERR_* 常量 — 对齐 PHP 上传错误码
UploadError
上传错误 — 对齐 PHP think\exception\FileException

Functions§

parse_multipart
解析 multipart/form-data 请求 — 对齐 PHP Request::file() + $_FILES