Fra*_*ank 10 php api amazon-s3 amazon-web-services
我正在使用S3 PHP Class学习Amazon S3.我已将所有文件上传到我的S3存储桶,现在我想为我的存储桶中的每个可用文件创建链接.
以下功能对我有用吗?
public static function getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false)
{
}
$s3 = new S3('access-key', 'secret-key');
$s3->getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false);
Run Code Online (Sandbox Code Playgroud)
或者是另一个函数get_object_url,但get_object_url()不是在我的S3类中.
我正在使用Undesigned的Amazon S3 PHP类.
小智 11
以下模式对于构造S3 URL有效:
http(s)://<bucket>.s3.amazonaws.com/<object>
http(s)://s3.amazonaws.com/<bucket>/<object>
Run Code Online (Sandbox Code Playgroud)
除了Hossein的回答之外,如果您想在访问链接后立即开始下载(模拟“另存为... ”行为),您需要在Bucket和Key旁边添加ResponseContentDisposition参数,如下所示:
$cmd = $s3Client->getCommand('GetObject', [
'Bucket' => 'my-bucket',
'Key' => 'testKey',
'ResponseContentDisposition' => 'attachment; filename="custom_file_name.mp3"'
]);
$request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
$presignedUrl = (string) $request->getUri();
Run Code Online (Sandbox Code Playgroud)
注意:自定义文件名是可选的,如果不指定,下载的文件将具有其 S3 名称。
如果您希望公众访问存储桶,那就很简单了
HTTP:// [YourBucketName] .s3.amazonaws.com/[YourFileName]
只要你正确设置权限.
如果你担心下载滥用,你需要一个经过身份验证的URL(我猜你想从你的代码中填写).在这种情况下,我建议您使用Amazon SDK:http://aws.amazon.com/sdkforphp/,因为它包含您需要的示例.
$s3->getObjectUrl($bucket, $filename, '5 minutes');
Run Code Online (Sandbox Code Playgroud)
文档:http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_getObjectUrl