使用流过滤器对来自 S3 的文件进行 base64 编码时缺少最后一个字符

Missing last character while base64 encoding a file from S3 using stream filter

我对 PHP 的流转换过滤器 (base64_encode) 有一个非常奇怪的问题。我的目标是使用 AWS S3 SDK 的 streamWrapper 和 base64 编码从 s3 存储桶中读取文件,回显以响应。为此,我使用以下代码,

@ob_flush();
@flush();
$fh = fopen(<FILE_PATH>, 'r');
stream_filter_append($fh, 'convert.base64-encode');
fpassthru($fh);
fclose($fh);

这适用于所有类型的文件,但对于文本文件,它会删除最后一个字符。当我们解码 base64 响应时,最后一个字符丢失。

例如,

Hello, world! 编码为 SGVsbG8sIHdvcmxkIQ==

但是上面的函数在编码时省略了最后一个字符,产生了下面的结果

SGVsbG8sIHdvcmxk 解码为 Hello, world

大家有什么想法吗?

非常感谢你帮助我。

在 AWS 工程师的支持下,我能够解决这个问题。

可以在此处找到解决方案 https://github.com/aws/aws-sdk-php/issues/540

谢谢。