使用 s3 内容文件构建 guzzle 流响应

问题描述

我想使用以流式模式打开的 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...