【发布时间】:2021-08-16 01:49:09
【问题描述】:
我有一个表单,我可以在其中将多个文件上传到我的 laravel 后端,然后我想用 Guzzle 将所有这些文件发送到外部 API
如果我上传的 MB 比可用内存多,我的脚本会出现内存不足的问题。错误信息是
允许的内存大小...字节用尽(试图分配...字节)
很遗憾,我无法动态更改内存限制
这是我使用的代码
// in laravel controller method
/* @var \Illuminate\Http\Request $request */
$files = $request->allFiles();
$filesPayload = [];
foreach ($files as $key => $file) {
$filesPayload[] = [
'name' => $key,
'contents' => file_get_contents($file->path()),
// 'contents' => fopen($file->path(), 'r'), // memory issue as well
'filename' => $file->getClientOriginalName(),
];
}
$client = new \GuzzleHttp\Client\Client([
'base_uri' => '...',
]);
$response = $client->post('...', [
'headers' => [
'Accept' => 'application/json',
'Content-Length' => ''
],
'multipart' => $filesPayload,
]);
我正在使用 Guzzle 6。In the docs 我找到了 fopen 的示例,但这也引发了内存错误
有没有办法用 Guzzle 发送多个文件而不将它们加载到内存中?
【问题讨论】:
-
感谢您的链接 - 我现在要测试
-
我已经从链接的解决方案中尝试了相同的方法,但我一直收到相同的
Allowed memory size of ... bytes exhausted错误消息 -
guzzle 似乎不支持块或流式上传,也许改用原始套接字?
标签: php laravel guzzle guzzle6