问题描述
我想使用以流式模式打开的 s3 文件内容构建一个 PHP slim 4 响应。
$s3Client = Minio::getInstance(true);
$fileHandler = \fopen('s3://' . $this->bucketName . '/' . $filename,'r');
if (!$fileHandler) {
throw new \Exception('Unable to open file ' . 's3://' . $this->bucketName . '/' . $filename . ' for reading.');
}
$objectInfo = Minio::getHeadobject($this->bucketName,$filename,true);
$this->response = $this->response
->withHeader('Accept-Ranges',$objectInfo['AcceptRanges'])
->withHeader('Content-Length',$objectInfo['ContentLength'])
->withHeader('Content-Type',$objectInfo['ContentType'])
->withHeader('Content-disposition','attachment; filename="' . $filename . '"')
->withStatus(200);
$stream = GuzzleHttp\Psr7\Utils::streamFor($fileHandler,['size' => 1024]);
$this->response->getBody()->write($stream);
return $this->response;
如果我转储 $objectInfo 变量,则与文件相关的每个信息都是正确的。 如果我转储 $stream 变量,则流为空。 如果我尝试对本地文件(在我的主机上,而不是在 s3 上)执行相同的操作,则没有问题。
我的目标是允许从浏览器下载文件。该文件可能很大,所以我使用流式打开的内容(我的 s3 客户端是使用 registerStreamWrapper() 构建的)。
PHP 版本:7.4 狂饮:狂饮http/狂饮6.5.5 苗条:苗条/苗条 4.7.1
我不明白为什么 guzzle 无法从 s3 内容创建流。 提前感谢您的建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)