**文件管理** ############################## 在AWS S3中,用户可以通过一系列的接口管理桶(Bucket)中的文件(Object),比如ListObjects,DeleteObject,CopyObject,DoesObjectExist等。 列出桶中的文件 ============================= 您可以使用S3Client::listObjects列出存储中间中的文件:: putObject([ 'Bucket'=>$bucket, 'Key'=>"dir/obj" . strval($i), 'Body'=> 'hi' ]); } $prefix = 'dir/'; $delimiter = '/'; $nextMarker = ''; $maxKeys = 2; while (true) { try { $listObjectInfo = $s3Client->listObjects(['Bucket'=>$bucket, 'Delimiter' => $delimiter, 'Prefix' => $prefix, 'MaxKeys' => $maxKeys, 'Marker' => $nextMarker,]); } catch (AwsException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } var_dump($listObjectInfo); //得到nextMarker,从上一次listObjects读到的最后一个文件的下一个文件开始继续获取文件列表 $nextMarker = $listObjectInfo['NextMarker']; echo "nextMarker" . $nextMarker . "\n"; if ($nextMarker === null) { break; } } } 上述代码中的数据筛选参数如下所示: ======================== ======================================================================================================== 参数 说明 ======================== ======================================================================================================== Delimiter 用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素 Prefix 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix MaxKeys 限定此次返回object的最大数,如果不设定,默认为100 Marker 设定结果从marker之后按字母排序的第一个开始返回 ======================== ======================================================================================================== .. note:: 上述表中的参数都是可选参数 判断文件是否存在 ============================ 您可以使用S3Client::doesObjectExist判断文件是否存在:: doesObjectExist($bucketName, $objectName); } catch(\Aws\Exception\AwsException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); var_dump($exist); } 删除单个文件 =========================== 您可以使用S3Client::deleteObject删除单个需要删除的文件:: deleteObject(['Bucket'=>$bucketName, 'Key'=>$objectName]); } catch(AwsException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); } 删除多个文件 ============================ 您可以使用S3Client::deleteObjects批量删除文件:: deleteObjects($bucket, $objects); } catch(AwsException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n"); } .. attention:: 该接口目前不兼容,暂时不可用 拷贝文件 =========================== 您可以使用S3Client::copyObject拷贝文件:: /** * @param $s3Client * @param $srcBucketName * @param $srcObjectName * @param $destBucketName * @param $destObjectName */ function copyObject($s3Client,$srcBucketName,$srcObjectName,$destBucketName,$destObjectName){ try{ $s3Client->copyObject(['Bucket'=>$destBucketName,'Key'=>$destObjectName, 'CopySource'=>'/' . $srcBucketName . '/' . $srcObjectName]); } catch (\Aws\Exception\AwsException $exception){ echo $exception->getMessage() . "\n"; } } .. attention:: 1. 支持跨桶的文件copy 修改文件元信息 ========================== 暂时不提供此类方法 获取文件的文件元信息 ========================== 您可以使用S3Client::getObjectMeta获取对象的元数据信息:: headObject(['Bucket'=>$bucketName,'Key'=>$objectName]); echo $result . "\n"; echo $result['ContentLength']; } catch (\Aws\Exception\AwsException $exception){ echo $exception->getMessage() . "\n"; } } .. attention:: 1. 获取的元数据通过一个array返回,返回值为HTTP头类型的元数据与用户自定义元数据 2. 元数据名均为小写 生成私有云对象可以下载的URL链接 ============================== 您可以使用S3Client::getCommand获取对象可下载URL:: getCommand('GetObject', [ 'Bucket' => $bucketName, 'Key' => $objectName ]); $request = $s3Client->createPresignedRequest($cmd, '+20 hours'); // minutes,hours // Get the actual presigned-url $presignedUrl = (string) $request->getUri(); echo $presignedUrl; }