【发布时间】:2020-02-07 21:42:36
【问题描述】:
我有一些 PHP 代码用于循环数据库查询并创建 CSV 文件。
该文件使用fopen() 创建并在例程结束时下载。没问题。
但是,在 CSV 创建结束时,我尝试使用相同的生成内容 ($output) 将文件推送到 S3 存储桶。
失败并显示以下消息:
AWS 错误类型:服务器,AWS 错误消息:您提供的标头暗示未实现的功能,用户代理:aws-sdk-php2/2.7.27 Guzzle/3.9.3 curl/7.47.0 PHP/7.0.33-0ubuntu0.16.04.9 在 /www/MIND/gen6portal/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php 第 91 行抛出 p>
我知道这与我尝试将流作为 S3 密钥的主体传递有关,但我不知道该怎么做。任何指针表示赞赏。 代码如下:
$output = fopen('php://output', 'w');
while ($rows = mysqli_fetch_assoc($result)) {
fputcsv($output, $rows); // there's some more processing that I do but this works fine
}
//Now I want to upload it to S3:
$s3->putObject([
'Bucket' => 'mybucket',
'Key' => 'myfile.csv',
'Body' => $output,
'ACL' => 'public-read'
]);
fclose($output);
有趣的是,如果我只是尝试获取一个现有文件(以验证我是否可以访问该 S3 存储桶)它上传就好了:
s3->putObject([
'Bucket' => 'mybucket',
'Key' => "myfile.csv",
'Body' => fopen('temp.csv', 'rb'),
'ACL' => 'public-read'
]);
【问题讨论】:
-
有什么原因你不能把它放到一个临时文件中,然后将该临时文件上传到 S3?