• 如何使用AWS SDK for PHP操作Minio Server
    • 1. 前提条件
    • 2. 安装
    • 3. 使用GetObject和PutObject
    • 4. 生成pre-signed URL
    • 5. 获取plain URL
    • 6. 设置存储桶策略

    如何使用AWS SDK for PHP操作Minio Server

    aws-sdk-php是PHP语言版本的官方AWS SDK。本文我们将学习如何使用aws-sdk-php来操作Minio Server。

    1. 前提条件

    从这里下载并安装Minio Server。

    2. 安装

    从AWS SDK for PHP官方文档下载将安装aws-sdk-php

    3. 使用GetObject和PutObject

    下面示例描述的是如何使用aws-sdk-php对Minio Server进行putObject和getObject操作。请将example.php文件中的endpoint,key, secret, Bucket修改为你的本地配置。注意,我们将use_path_style_endpoint设置为true以使用AWS SDK for PHP来操作Minio。了解更多,请参考AWS SDK for PHP。

    1. <?php
    2. // 使用Composer autoloader引入SDK
    3. date_default_timezone_set('America/Los_Angeles');
    4. require 'vendor/autoload.php';
    5. $s3 = new Aws\S3\S3Client([
    6. 'version' => 'latest',
    7. 'region' => 'us-east-1',
    8. 'endpoint' => 'http://localhost:9000',
    9. 'use_path_style_endpoint' => true,
    10. 'credentials' => [
    11. 'key' => 'YOUR-ACCESSKEYID',
    12. 'secret' => 'YOUR-SECRETACCESSKEY',
    13. ],
    14. ]);
    15. // 发送PutObject请求并获得result对象
    16. $insert = $s3->putObject([
    17. 'Bucket' => 'testbucket',
    18. 'Key' => 'testkey',
    19. 'Body' => 'Hello from Minio!!'
    20. ]);
    21. // 下载文件的内容
    22. $retrive = $s3->getObject([
    23. 'Bucket' => 'testbucket',
    24. 'Key' => 'testkey',
    25. 'SaveAs' => 'testkey_local'
    26. ]);
    27. // 通过索引到结果对象来打印结果的body。
    28. echo $retrive['Body'];

    修改之后,运行程序

    1. php example.php
    2. Hello from Minio!!

    4. 生成pre-signed URL

    1. <?php
    2. // 从client中获得一个commad对象
    3. $command = $s3->getCommand('GetObject', [
    4. 'Bucket' => 'testbucket',
    5. 'Key' => 'testkey'
    6. ]);
    7. // 获得一个10分钟有效期的pre-signed URL
    8. $presignedRequest = $s3->createPresignedRequest($command, '+10 minutes');
    9. // 获得presigned-url
    10. $presignedUrl = (string) $presignedRequest->getUri();

    5. 获取plain URL

    获取一个plain URL,你需要将你的object/bucket权限设为public。注意,你不会获得带有后面这些信息的URL,X-Amz-Algorithm=[…]&X-Amz-Credential=[…]&X-Amz-Date=[…]&X-Amz-Expires=[…]&X-Amz-SignedHeaders=[…]&X-Amz-Signature=[…]

    1. <?php
    2. $plainUrl = $s3->getObjectUrl('testbucket', 'testkey');

    6. 设置存储桶策略

    1. <?php
    2. $bucket = 'testbucket';
    3. // 该策略设置存储桶为只读
    4. $policyReadOnly = '{
    5. "Version": "2012-10-17",
    6. "Statement": [
    7. {
    8. "Action": [
    9. "s3:GetBucketLocation",
    10. "s3:ListBucket"
    11. ],
    12. "Effect": "Allow",
    13. "Principal": {
    14. "AWS": [
    15. "*"
    16. ]
    17. },
    18. "Resource": [
    19. "arn:aws:s3:::%s"
    20. ],
    21. "Sid": ""
    22. },
    23. {
    24. "Action": [
    25. "s3:GetObject"
    26. ],
    27. "Effect": "Allow",
    28. "Principal": {
    29. "AWS": [
    30. "*"
    31. ]
    32. },
    33. "Resource": [
    34. "arn:aws:s3:::%s/*"
    35. ],
    36. "Sid": ""
    37. }
    38. ]
    39. }
    40. ';
    41. // 如果你想将文件放到指定目录,你只需要修改'arn:aws:s3:::%s/*'为'arn:aws:s3:::%s/folder/*'
    42. // 创建一个存储桶
    43. $result = $s3->createBucket([
    44. 'Bucket' => $bucket,
    45. ]);
    46. // 配置策略
    47. $s3->putBucketPolicy([
    48. 'Bucket' => $bucket,
    49. 'Policy' => sprintf($policyReadOnly, $bucket, $bucket),
    50. ]);

    原文: https://docs.minio.io/cn/how-to-use-aws-sdk-for-php-with-minio-server.html