在开发过程中,有时会遇到大文件传输或者说在服务器带宽不足的时候就可以利用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;}