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;
}
 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM