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。
<span class="pun"><span class="php"><span class="hljs-meta"><?</span></span></span> <span class="pln"><span class="php"><span class="hljs-meta">php</span></span></span>
<span class="com"><span class="hljs-comment">// 使用Composer autoloader引入SDK</span></span>
<span class="pln">date_default_timezone_set</span> <span class="pun">(</span> <span class="str"><span class="hljs-string">'America/Los_Angeles'</span></span> <span class="pun">);</span>
<span class="kwd"><span class="hljs-built_in">require</span></span> <span class="str"><span class="hljs-string">'vendor/autoload.php'</span></span> <span class="pun">;</span>
<span class="pln">$s3 </span> <span class="pun">=</span> <span class="kwd"><span class="hljs-keyword">new</span></span> <span class="typ">Aws</span> <span class="pln">\S</span> <span class="lit">3</span> <span class="pln">\S</span> <span class="lit">3Client</span> <span class="pun">([</span>
<span class="str"><span class="hljs-string">'version'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'latest'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'region'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'us-east-1'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'endpoint'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'http://localhost:9000'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'use_path_style_endpoint'</span></span> <span class="pun">=></span> <span class="kwd"><span class="hljs-keyword">true</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'credentials'</span></span> <span class="pun">=></span> <span class="pun">[</span>
<span class="str"><span class="hljs-string">'key'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'YOUR-ACCESSKEYID'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'secret'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'YOUR-SECRETACCESSKEY'</span></span> <span class="pun">,</span>
<span class="pun">],</span>
<span class="pun">]);</span>
<span class="com"><span class="hljs-comment">// 发送PutObject请求并获得result对象</span></span>
<span class="pln">$insert </span> <span class="pun">=</span> <span class="pln"> $s3</span> <span class="pun">-></span> <span class="pln">putObject</span> <span class="pun">([</span>
<span class="str"><span class="hljs-string">'Bucket'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'testbucket'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'Key'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'testkey'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'Body'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'Hello from Minio!!'</span></span>
<span class="pun">]);</span>
<span class="com"><span class="hljs-comment">// 下载文件的内容</span></span>
<span class="pln">$retrive </span> <span class="pun">=</span> <span class="pln"> $s3</span> <span class="pun">-></span> <span class="pln">getObject</span> <span class="pun">([</span>
<span class="str"><span class="hljs-string">'Bucket'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'testbucket'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'Key'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'testkey'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'SaveAs'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'testkey_local'</span></span>
<span class="pun">]);</span>
<span class="com"><span class="hljs-comment">// 通过索引到结果对象来打印结果的body。</span></span>
<span class="pln"><span class="hljs-built_in">echo</span> <span class="hljs-variable">$retrive</span></span> <span class="pun">[</span> <span class="str"><span class="hljs-string">'Body'</span></span> <span class="pun">];</span>
修改之后,运行程序
<span class="pln"><span class="hljs-selector-tag">php</span> <span class="hljs-selector-tag">example</span></span> <span class="pun"><span class="hljs-selector-class">.</span></span> <span class="pln"><span class="hljs-selector-class">php</span></span>
<span class="typ">Hello</span> <span class="kwd"><span class="hljs-keyword">from</span></span> <span class="typ">Minio</span> <span class="pun">!!</span>
4. 生成pre-signed URL
<span class="pun"><span class="php"><span class="hljs-meta"><?</span></span></span> <span class="pln"><span class="php"><span class="hljs-meta">php</span></span></span>
<span class="com"><span class="hljs-comment">// 从client中获得一个commad对象</span></span>
<span class="pln">$command </span> <span class="pun">=</span> <span class="pln"> $s3</span> <span class="pun">-></span> <span class="pln">getCommand</span> <span class="pun">(</span> <span class="str"><span class="hljs-string">'GetObject'</span></span> <span class="pun">,</span> <span class="pun">[</span>
<span class="str"><span class="hljs-string">'Bucket'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'testbucket'</span></span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'Key'</span></span> <span class="pun">=></span> <span class="str"><span class="hljs-string">'testkey'</span></span>
<span class="pun">]);</span>
<span class="com"><span class="hljs-comment">// 获得一个10分钟有效期的pre-signed URL</span></span>
<span class="pln">$presignedRequest </span> <span class="pun">=</span> <span class="pln"> $s3</span> <span class="pun">-></span> <span class="pln">createPresignedRequest</span> <span class="pun">(</span> <span class="pln">$command</span> <span class="pun">,</span> <span class="str"><span class="hljs-string">'+10 minutes'</span></span> <span class="pun">);</span>
<span class="com"><span class="hljs-comment">// 获得presigned-url</span></span>
<span class="pln">$presignedUrl </span> <span class="pun">=</span> <span class="pun">(</span> <span class="kwd">string</span> <span class="pun">)</span> <span class="pln"> $presignedRequest</span> <span class="pun">-></span> <span class="pln">getUri</span> <span class="pun">();</span>
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=[…]
<span class="pun"><span class="php"><span class="hljs-meta"><?</span></span></span> <span class="pln"><span class="php"><span class="hljs-meta">php</span></span></span>
<span class="pln">$plainUrl </span> <span class="pun">=</span> <span class="pln"> $s3</span> <span class="pun">-></span> <span class="pln">getObjectUrl</span> <span class="pun">(</span> <span class="str"><span class="hljs-string">'testbucket'</span></span> <span class="pun">,</span> <span class="str"><span class="hljs-string">'testkey'</span></span> <span class="pun">);</span>
6. 设置存储桶策略
<span class="pun"><span class="php"><span class="hljs-meta"><?</span></span></span> <span class="pln"><span class="php"><span class="hljs-meta">php</span></span></span>
<span class="pln"><span class="hljs-variable">$bucket</span> </span> <span class="pun">=</span> <span class="str"><span class="hljs-string">'testbucket'</span></span> <span class="pun">;</span>
<span class="com"><span class="hljs-comment">// 该策略设置存储桶为只读</span></span>
<span class="pln"><span class="hljs-variable">$policyReadOnly</span> </span> <span class="pun">=</span> <span class="str"><span class="hljs-string">'{</span></span>
<span class="str"> <span class="hljs-string">"Version"</span>: <span class="hljs-string">"2012-10-17"</span>,</span>
<span class="str"> <span class="hljs-string">"Statement"</span>: [</span>
<span class="str"> {</span>
<span class="str"> <span class="hljs-string">"Action"</span>: [</span>
<span class="str"> <span class="hljs-string">"s3:GetBucketLocation"</span>,</span>
<span class="str"> <span class="hljs-string">"s3:ListBucket"</span></span>
<span class="str"> ],</span>
<span class="str"> <span class="hljs-string">"Effect"</span>: <span class="hljs-string">"Allow"</span>,</span>
<span class="str"> <span class="hljs-string">"Principal"</span>: {</span>
<span class="str"> <span class="hljs-string">"AWS"</span>: [</span>
<span class="str"> <span class="hljs-string">"*"</span></span>
<span class="str"> ]</span>
<span class="str"> },</span>
<span class="str"> <span class="hljs-string">"Resource"</span>: [</span>
<span class="str"> "<span class="hljs-selector-tag">arn</span> <span class="hljs-selector-pseudo">:aws</span> <span class="hljs-selector-pseudo">:s3</span>:::%<span class="hljs-selector-tag">s</span>"</span>
<span class="str"> ],</span>
<span class="str"> <span class="hljs-string">"Sid"</span>: <span class="hljs-string">""</span></span>
<span class="str"> },</span>
<span class="str"> {</span>
<span class="str"> <span class="hljs-string">"Action"</span>: [</span>
<span class="str"> <span class="hljs-string">"s3:GetObject"</span></span>
<span class="str"> ],</span>
<span class="str"> <span class="hljs-string">"Effect"</span>: <span class="hljs-string">"Allow"</span>,</span>
<span class="str"> <span class="hljs-string">"Principal"</span>: {</span>
<span class="str"> <span class="hljs-string">"AWS"</span>: [</span>
<span class="str"> <span class="hljs-string">"*"</span></span>
<span class="str"> ]</span>
<span class="str"> },</span>
<span class="str"> <span class="hljs-string">"Resource"</span>: [</span>
<span class="str"> "<span class="hljs-selector-tag">arn</span> <span class="hljs-selector-pseudo">:aws</span> <span class="hljs-selector-pseudo">:s3</span>:::%<span class="hljs-selector-tag">s</span> <span class="hljs-comment">/*"</span></span>
<span class="str"> ],</span>
<span class="str"> <span class="hljs-string">"Sid"</span>: <span class="hljs-string">""</span></span>
<span class="str"> }</span>
<span class="str"> ]</span>
<span class="str">}</span>
<span class="str">'</span> <span class="pun">;</span>
<span class="com">/<span class="hljs-regexp">/ 如果你想将文件放到指定目录,你只需要修改'arn:aws:s3:::%s/</span>*<span class="hljs-string">'为'</span> <span class="hljs-symbol">arn:</span> <span class="hljs-symbol">aws:</span>s3::<span class="hljs-symbol">:%s/folder/*<span class="hljs-string">'</span></span></span>
<span class="com"><span class="hljs-comment">// 创建一个存储桶</span></span>
<span class="pln">$result </span> <span class="pun">=</span> <span class="pln"> $s3</span> <span class="pun">-></span> <span class="pln">createBucket</span> <span class="pun">([</span>
<span class="str"><span class="hljs-string">'Bucket'</span></span> <span class="pun">=></span> <span class="pln"> $bucket</span> <span class="pun">,</span>
<span class="pun">]);</span>
<span class="com"><span class="hljs-comment">// 配置策略</span></span>
<span class="pln">$s3</span> <span class="pun">-></span> <span class="pln">putBucketPolicy</span> <span class="pun">([</span>
<span class="str"><span class="hljs-string">'Bucket'</span></span> <span class="pun">=></span> <span class="pln"> $bucket</span> <span class="pun">,</span>
<span class="str"><span class="hljs-string">'Policy'</span></span> <span class="pun">=></span> <span class="pln"> <span class="hljs-keyword">sprintf</span></span> <span class="pun">(</span> <span class="pln">$policyReadOnly</span> <span class="pun">,</span> <span class="pln"> $bucket</span> <span class="pun">,</span> <span class="pln"> $bucket</span> <span class="pun">),</span>
<span class="pun">]);</span>
原文: https://docs.minio.io/cn/how-to-use-aws-sdk-for-php-with-minio-server.html