为了方便起见,我决定使用 AWS SDK 的包装器,这样我就可以从我的 S3 存储桶中流式传输数据,但情况如下:
使用此代码写入我的存储桶有效
$client = \Aws\Common\Aws::factory(array(
'key' => 'my key',
'secret' => 'my secret',))
->get('S3');
$client->registerStreamWrapper();
$fh = fopen('s3://mybucket/test.txt','w');
fwrite($fh, 'Test');
fclose($fh);
该文件在此操作后存在,所以一切正常,但之后我无法读取它,因为fopen('s3://mybucket/test.txt', 'r')
失败并显示以下警告:
Warning: fopen(s3://mybucket/test.txt): failed to open stream: "Aws\S3\StreamWrapper::stream_open" call failed
...这个错误:
Fatal error: Uncaught exception 'Guzzle\Common\Exception\RuntimeException' with message 'Error creating resource. [type] 2 [message] fopen(https://mybucket.s3.amazonaws.com/test.txt): failed to open stream: Invalid argument [file] phar://path/to/aws.phar/Guzzle/Stream/PhpStreamRequestFactory.php [line] 217' in phar://path/to/aws.phar/Guzzle/Stream/PhpStreamRequestFactory.php on line 271
因此,我可以捕获该异常或改用该异常,getObject
但我仍然无法读取文件流,这违背了目的。也许这不是一件大事,但我对 Guzzle 和 AWS SDK 的内部工作原理并不熟悉。
任何关于我在这里做错的帮助或指南将不胜感激,我在谷歌上搜索了一段时间,但我找不到有用的信息来解决它,所以这一切很可能都是由于我的无能而发生的.
提前致谢。
干杯。