巧妙使用阿里云OSS存储服务器

在开发过程中,有时会遇到大文件传输或者说在服务器带宽不足的时候就可以利用OSS来存储你的文件,它不经过你的服务器,所以加载起来较快,同时它也很便宜,现在就TP3.2上传大文件到OSS上进行说明:

首先下载PHP SDK包,将它解压放到ThinkPHP/Library/Vendor下;

定义自己OSS服务的相关参数,此时我以常量定义到入口文件处:

define("AccessKeyId", "************");
define("AccessKeySecret", "***************");
define("EndPoint", "*************");
define("Bucket", "**********");
define("Path", "upload/");

接下来就要考虑上传文件的大小了,过大的文件要分片上传,此时我用的就是分片上传的方法:

控制器中引入:

 

use OSS\OssClient; // | OSS客户端类,用户通过OssClient的实例调用接口 |
use OSS\Core\OssException; // | OSS异常类,用户在使用的过程中,只需要注意这个异常|
require_once "./ThinkPHP/Library/Vendor/aliyun/autoload.php"; //引入这个阿里云文件

在方法中就可以调用了:

 

 

$accessKeyId = AccessKeyId;
$accessKeySecret = AccessKeySecret;
$endpoint = EndPoint;
$path=Path;
$bucket=Bucket;
                
$file=$_FILES["wc_type_img"];
try {
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    $url=$this->multiuploadFile($ossClient, $bucket, $file,$path);
    $typeModel->wc_type_img=$url;
} catch (Exception $e) {
    print $e->getMessage();
}
/**
* 通过multipart上传文件
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function multiuploadFile($ossClient, $bucket, $files,$path) {
   $t_array= explode(".", $files["name"]);//拆分名
   $object = $path . sha1(time()+ rand(1000, 9999)) .".".end($t_array) ;
   $file = $files["tmp_name"];
   try {
       $ossClient->multiuploadFile($bucket, $object, $file);
   } catch (OssException $e) {
       printf(__FUNCTION__ . ": FAILED\n");
       printf($e->getMessage() . "\n");
       return;
   }
   print(__FUNCTION__ . ":  OK" . "\n");

   return $object;
}

 

你可能感兴趣的:(PHP)