使用流过滤器对来自 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。
谢谢。
我对 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。
谢谢。