我们的团队最近迁移到了 Laminas,在这样做的过程中,我们的应用程序处理文件上传的方式现在遇到了问题。我们有 2 个应用程序(都是 MVC):一个视图应用程序和一个 API 应用程序。我们的视图应用程序处理来自浏览器的所有请求,并通过我们的 ApiProxyController 代理 API 请求。这适用于我们的每一个请求,除了我们的文件上传。对于这些请求 ( multipart/form-data;
),我们已经看到,当请求到达我们的 API 应用程序时,请求的主体是空的。
我们在使用最新版本的 Guzzle HTTP 客户端和 Laminas 客户端时都遇到了这个问题。这是我们用来代理来自视图应用程序的请求的代码片段:
/* @var $request \Laminas\Http\PhpEnvironment\Request */
$request = $this->getRequest();
// URI object used to build PSR-7 request; update URI for proper forwarding
$uri = $request->getUri();
$uri->setHost($this->apiHost);
$psr7Request = Psr7ServerRequest::fromLaminas($request)
->withoutHeader('Host')
->withHeader('Authorization', sprintf('Bearer %s', $identity->getAccessToken()->getToken()));
$guzzle = new \GuzzleHttp\Client([
// Turn off SSL certificate verification
'verify' => false,
// Prevent exceptions from being thrown due to HTTP status codes (e.g. 4xx, 5xx)
'exceptions' => false,
]);
$psr7Response = $guzzle->send($psr7Request);
$response = Psr7Response::toLaminas($psr7Response);