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

1. 前提条件

这里下载并安装MinIO Server。
安装minio

2. 安装

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

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

修改之后,运行程序

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

4. 生成pre-signed URL

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

6. 设置存储桶策略

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

文章来源:http://docs.minio.org.cn/docs/master/how-to-use-aws-sdk-for-php-with-minio-server