kodus/tempkit

实现PSR-7UploadedFile对象的服务端收集和恢复策略

1.1.0 2022-08-24 11:06 UTC

This package is auto-updated.

Last update: 2024-08-25 11:56:25 UTC


README

本软件包实现了对PSR-7 UploadedFile对象的临时收集和恢复的服务端策略。

还可以通过FlySystem提供一个专门的端口,也可用。

PHP Version

您可以使用此服务实现控制器,以收集浏览器异步提交的文件并返回临时文件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元数据文件。

有关内联文档,请参阅TempFileService