PHP-- 亚马逊 aws s3 文件上传及获取下载地址

<?
/**
* 加载s3客户端
* @return string
*/
function AWS_S3Client(){
  //证书
  $credentials = new Aws\Credentials\Credentials(你的S3_ACCESS_KEY_ID, 你的S3_SECRET_ACCESS_KEY);
  //s3客户端
  return new Aws\S3\S3Client([
    version => latest,
    //地区 亚太区域(新加坡) ap-southeast-1
    region => eu-central-1,//自行配置
    //加载证书
    credentials => $credentials,
    //开启bug调试
    //‘debug‘ => true
  ]);
}
 
/**
* 判断S3中是否有文件
* @param string $file
* @return string
*/
function AWS_S3Response($file){
  $s3Client = AWS_S3Client();
  //存储桶 S3_BUCKET;
  return $s3Client->doesObjectExist(你的存储桶名称, $file);//检测s3是否存在,空格转换会无法找到文件
}
 
/**
* AWS S3上传文件
* @param string $file 文件绝对路径
* @param string $fileName 文件名称
* @param int $type 1使用断点续传,0不使用
* @param bool $publicRead 是否开放访问
* @return array $path
*/
function S3FileUpload($file = ‘‘, $fileName = ‘‘, $type = 0, $publicRead = false){
  $s3Client = AWS_S3Client();
  $bucket = 你的存储桶名称;
  //需要上传的文件
  $source = FILE_UPLOAD.$file;//绝对路径 根据自己的项目配置
  $fileName = $fileName ? $fileName : $file;
  $config = [
    bucket => $bucket,
    key => $fileName,//这里如果是相对路径 如 test/img/1.jpg 会自动创建目录
  ];
  if ($publicRead) {
    $config[ACL] = public-read;
  }
  $uploader = new Aws\S3\MultipartUploader($s3Client, $source, $config);
  if ($type == 1) {
    //在分段上传过程中发生错误,重新开始未完成的上传。
    do {
      try {
        $result = $uploader->upload();
      } catch (Aws\Exception\MultipartUploadException $e) {
        $uploader = new Aws\S3\MultipartUploader($s3Client, $source, [
          state => $e->getState(),
        ]);
      }
    } while (!isset($result));
 
    //返回上传后的地址
    $data = [
      type => 1,
      message => urldecode($result[ObjectURL])
    ];
  } else {
    try {
      $result = $uploader->upload();
      //返回上传后的地址
      $data = [
        type => 1,
        message => urldecode($result[ObjectURL])
      ];
    } catch (Aws\Exception\MultipartUploadException $e) {
      $data = [
        type => 0,
        message => $e->getMessage()
      ];
    }
  }
  return $data;
}
 
/**
* 生成AWS S3下载/上传文件url地址
* @param string $file 文件相对地址
* @param string $fileName 下载的文件名称
* @param string $expires 授权时间
* @return string
*/
function S3FileDownload($file, $fileName = ‘‘, $expires = +10 minutes){
  if(!$fileName){
    $pathinfo = pathinfo($file);
    $fileName = $pathinfo[basename];
  }
  $s3Client = AWS_S3Client();
  $cmd = $s3Client->getCommand(GetObject, [
    Bucket => 你的存储桶名称,
    Key => $file, //地址,     //‘ResponseContentType‘ => ‘text/plain‘,     //‘ResponseContentLanguage‘ => ‘en-US‘,     //‘ResponseCacheControl‘ => ‘No-cache‘,     //‘ResponseExpires‘ => gmdate(DATE_RFC2822, time() + 3600), 
    ResponseContentDisposition => attachment; filename=.$fileName,//访问链接直接下载
  ]);
  $request = $s3Client->createPresignedRequest($cmd, $expires);
  //创建预签名 URL
  $presignedUrl = (string)$request->getUri();
  return $presignedUrl;
}
 ?>

 

PHP-- 亚马逊 aws s3 文件上传及获取下载地址

上一篇:获取网站ico图标


下一篇:容器