【发布时间】:2019-03-12 15:25:18
【问题描述】:
这里是 PHP/AWS S3 菜鸟:从事一个项目,我需要能够显示来自 AWS S3 存储桶的专辑插图以及播放音乐文件。我可以上传,但是在尝试查看图像时,它会下载。检查了内容类型和内容配置。我相信问题出在这段代码的 sn-p 上:我将不胜感激任何帮助/建议。
<?php
....
....
try {
$s3 = S3Client::factory(
array(
'credentials' => array(
'key' => $IAM_KEY,
'secret' => $IAM_SECRET
),
'version' => 'latest',
'region' => 'us-east-2'
)
);
//
$result = $s3->getObject(array(
'Bucket' => $BUCKET_NAME,
'Key' => $keyPath
));
echo $result;
//exit();
// Display it in the browser
header("Content-Type: {$result['ContentType']}");
header('Content-Disposition: filename="' . basename($keyPath) . '"');
return $result['Body'];
} catch (Exception $e) {
die("Error: " . $e->getMessage());
}
?>
<!DOCTYPE html>
<html>
<head>
<title>display image</title>
</head>
<body>
<img src="<?php echo $result['body']; ?>">
</body>
</html>
【问题讨论】:
-
你试过
file_get_contents()吗?您的存储桶是否对所有非您的身份验证用户具有查看权限? -
是的,我有@Joshua,但没用。我可以访问存储桶并访问内容,但不是在浏览器上显示,而是将其下载到我的桌面
-
@Bonsa 旁注,您这样做很困难,将内容下载到服务器上并将它们返回到浏览器,这会不必要地占用服务器资源。您可以只生成一个有效期较短的预签名 URL 并将浏览器重定向到该 URL,从而允许浏览器使用签名 URL 提供的授权直接从 S3 获取。
-
另外,
echo $result;似乎有问题。这不会将结果对象发送到浏览器吗? (我的 php 有点生疏了。)你说 “已经检查了内容类型和内容配置”——你在哪里检查的?在浏览器看到的响应头中?你为什么要返回Content-Disposition?在尝试查看而不是下载对象时,什么应该是不必要的,并且可能没有帮助。
标签: php amazon-web-services amazon-s3