1

私はAmazonS3を使い始めたばかりなので、これが可能かどうかはわかりません。

ユーザーが画像ファイルをS3にアップロードできるアプリケーションがあります。これらの画像ファイルにアプリケーションユーザーのみがアクセスできるようにしたいので、ユーザーがログインして画像をリクエストすると表示されますが、URLを直接入力して画像にアクセスしようとすると、取得できません。画像。

このs3Coldfusionハンドラーを使用しACLていますが、アップロードするユーザーのみがバケットにアクセスでき、ACLを設定すると、public readアプリケーション以外のユーザーによるファイルへのアクセスがブロックされないため、正しく設定する方法がわかりません。 。

質問:
アプリケーションベースでACLを付与することは可能ですか?

4

1 に答える 1

3

空のacl文字列を渡すことによって、所有者へのアクセスのみを許可するバケットとオブジェクトを配置できます。所有者は、アプリケーションのユーザーではなく、所有しているAmazonアカウントを参照しています。

この例では、単一のバケットを作成してから、画像をサブフォルダーにアップロードします。

<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>

現在、 Amazonアカウントごとに100個のバケットしか持てないため、個別のバケットではなく、ユーザーごとにフォルダーを使用することをお勧めします。

于 2012-08-16T10:30:55.647 に答える