【发布时间】:2018-01-20 07:36:03
【问题描述】:
我了解到,如果 Guzzle 无法确定 Content-Length,它将发送 Transfer-Encoding: Chunked 标头,后端的 cURL 将处理分块。但我显然达到了 post_max_size 限制。 (“524288375 字节的 POST 内容长度超过了 8388608 字节的限制)当 POST 到工作的 uploadChunkerController 时。我知道上传处理程序(端点)适用于较小的文件。我觉得我的 Guzzle 选项配置有问题。我有将verify 设置为false,我需要在请求中发布api_key。
$client = new Client();
$fh = fopen('../storage/random-500M.pdf', 'r');
$url = 'https://local:8443/app_dev.php/_uploader/bigupload/upload';
$request = $client->request(
'POST',
$url,
[
'verify' => false,
'multipart' => [
[
'name' => 'api_key',
'contents' => 'abc123'
],
[
'name' => 'file',
'contents' => $fh,
'filename' => 'bigupload.pdf'
]
]
]
);
编辑 php.ini 设置不是一种选择,也不是解决方案。我发现了很多似乎适用于旧版本 Guzzle 的“解决方案”。我是不是想太多了?有没有更简单的解决方案?
【问题讨论】:
-
您发布到的服务器/脚本说您只能上传
8MB的文件,如果您有权访问该服务器/脚本,您将需要更改限制. -
这就是使用分块的全部原因。 BlueImp jQuery File Uploader 在前端/UI 端工作。我正在从另一个 PHP 脚本发布到相同的控制器操作。因此,如之前所述,使用 POST 的操作处理分块上传,只要我可以让 Guzzle/cURL 对文件进行分块并提供正确的标题,一切都应该是金色的。
-
@cmorrissey 是的,我关注了那篇博文。它适用于旧版本。当前 Guzzle 6 git repo 中不存在 EntityBody 类。我用它作为模型来达到我现在的位置。甚至尝试使用'$body = \GuzzleHttp\Psr7\stream_for($fh);'并将其作为资源传递。
标签: php guzzle blueimp uploading