我不确定这是否可行,因为我刚开始使用Amazon S3。
我有一个应用程序,用户可以将图像文件上传到S3。我希望这些图像文件只能由应用程序用户访问,因此如果用户登录并请求图像,它将会显示但是当我尝试通过直接输入图像来访问图像时,我没有得到图像。
我正在使用this s3 Coldfusion处理程序,但我不确定如何正确设置ACL
,因为只有上传用户才能访问存储桶并设置ACL到public read
不会阻止非应用程序用户访问文件。
问题:
是否可以在应用程序的基础上授予ACL?
答案 0 :(得分:3)
您可以通过传递空的acl字符串来放置仅允许访问所有者的存储桶和对象。所有者我会引用拥有的亚马逊帐户,而不是您应用程序中的用户。
此示例创建一个存储桶,然后将图像上传到子文件夹中。
<cfscript>
s3 = createobject("component", "s3").init(accessKeyId, secretAccessKey);
s3.putBucket("myapps-bucket", "");
s3.putObject(
bucketName="myapps-bucket",
fileKey="image.png",
contentType="image/png",
acl="",
keyName="user1234/image.png"
);
</cfscript>
要向用户显示图像,您必须生成对象的签名链接,否则他们将从s3获得授权错误
<!--- signed link valid for 30 mins --->
<cfset link = s3.getObject(bucket, "user1234/image.png", 30) />
<cfoutput>
<img src="#link#" />
</cfoutput>
目前每个亚马逊帐户只能有100 buckets,所以我建议每个用户使用一个文件夹而不是单独的存储桶。