file-upload - ReactPHP --> 文件上传 --> $request->getUploadedFiles() 返回空数组
问题描述
我正在通过《ReactPHP for Beginners》一书学习 ReactPHP。一切正常,但现在我在文件上传部分。
有一个简单的html表单:
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<title>ReactPHP App</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<div class="row">
<form action="/upload" method="post" enctype="multipart/form-data" class="justify-content-center">
<div class="form-group">
<label for="file">Submit a file:</label>
<input type="file" name="file" id="file" accept="image/x-png,image/jpeg" />
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</body>
</html>
而PHP Code女巫接收表单数据也很简单:
<?php
use Psr\Http\Message\ServerRequestInterface;
use React\EventLoop\LoopInterface;
use React\ChildProcess\Process;
use React\Http\Message\Response;
return [
'/' => function(ServerRequestInterface $request, LoopInterface $loop) {
$childProcess = new Process('cat pages/index.html', __DIR__);
$childProcess->start($loop);
return new Response(
200,
['Content-Type' => 'text/html'],
$childProcess->stdout
);
},
'/upload' => function (ServerRequestInterface $request, LoopInterface $loop) {
$files = $request->getUploadedFiles();
$file = $files['file'];
print_r($file);
return new Response(
200, ['Content-Type' => 'text/plain'], ''
);
}
];
如果我选择一个 JPG 文件并单击 «Submit»,$request->getUploadedFiles() 总是返回一个空数组。这里有什么问题?我在 Mac OS X (10.15.7) 上工作,并尝试使用不同的浏览器。
解决方案
看起来该服务器需要额外的中间件设置才能正确处理文件上传。您必须从React\Http\Middleware\
命名空间导入它。
$server = new Server($loop,
new StreamingRequestMiddleware(),
new RequestBodyBufferMiddleware(8 * 1024 * 1024), // 8 MiB
new RequestBodyParserMiddleware(8 * 1024 * 1024, 1), // 8 MiB
function (ServerRequestInterface $request) use ($router) {
return $router($request);
});
如果我们使用 curl,只要 ReactPHP 能够处理文件上传,这些额外的中间件是特定于 Web 浏览器的,例如
$ curl --form file=@some_file_that_we_are_going_to_upload http://0.0.0.0:8080/upload
请记住,路径和端口与“ReactPHP for Beginners”一书中的示例相关</p>
推荐阅读
- c# - Xamarin Forms XAML: yet another Binding syntax question
- pdf - 更改数据表 pdfmaker 扩展中的字体
- kubernetes - How to use external pod template in Airflow
- excel - 如何从各种工作表中捕获附加行
- emacs - Emacs prefix justifications?
- javascript - Can I provide a json path in CSV file in postman
- node.js - 如何使用从 mongoose 模型调用的 find() 从包含多个模型的集合中获取特定模型?
- c# - 我需要将一个文件分成多个文件,在文件中的特定点分开
- php - Unable to set up dialogFlow API
- csv - 如何使用批处理命令将变量甚至文本传递到文本文档中?