kodus / tempkit
实现PSR-7UploadedFile对象的服务端收集和恢复策略
1.1.0
2022-08-24 11:06 UTC
Requires
- php: >= 8.0
- kodus/uuid-v4: ^1.2
- psr/http-message: ^1.0
Requires (Dev)
- codeception/codeception: ^5
- codeception/module-asserts: ^3.0
- nyholm/psr7: ^1.5
This package is auto-updated.
Last update: 2024-08-25 11:56:25 UTC
README
本软件包实现了对PSR-7 UploadedFile
对象的临时收集和恢复的服务端策略。
您可以使用此服务实现控制器,以收集浏览器异步提交的文件并返回临时文件UUID,然后在完成后恢复上传的文件并将它们移动到永久存储。
将保留文件名和MIME类型(如客户端所发送)。
在定义的过期时间后,未恢复的文件将自动刷新。
用法
启动服务
$service = new TempFileService(__DIR__ . '/temp');
在您的异步文件提交控制器中,收集提交的文件并返回UUID
$uuids = []; foreach ($request->getUploadedFiles() as $file) { $uuids[] = $service->collect($file); } echo json_encode($uuids);
在您的表单提交控制器中,恢复收集的文件
foreach ($uuids as $uuid) { $file = $service->recover($uuid); // get information about recovered file: $filename = $file->getClientFilename(); $media_type = $file->getClientMediaType(); // move recovered file into permanent storage: $file->moveTo(__DIR__ . '/files/' . $file->getClientFilename()); }
或者,通过其他方式获取临时文件的路径,并移动/复制文件 - 例如,将上传的文件导入FlySystem
$file = $service->recover($uuid); $stream = fopen($file->getTempPath(), "r"); $filesystem->writeStream("uploads/" . $file->getClientFilename(), $stream); fclose($stream); $file->flush(); // optionally flush the temporary file after copying
请注意,如果您不刷新临时文件,它将在定义的过期时间后当然被垃圾回收。
另外,如果您手动重命名或移动临时文件,当TempFile
实例被销毁时,将立即为您收集并刷新JSON元数据文件。