最近一个朋友做了一个项目,项目中有这样的需求,就是需要用户可以上传和下载文件,但是要求速度有保证,又不影响服务器原有的带宽性能,因此我推荐给他使用云服务器oss来管理。
这里我推荐他的是阿里云的oss,主要是之前一直使用的都是阿里云。下面主要说明一下使用php如何来管理文件的上传下载。
阿里云的api都是提供sdk文档的,php的文档开源在github上面,通过composer就可以安装使用了。
阿里云的sdk位置为https://github.com/aliyun/aliyun-oss-php-sdk
使用步骤为:
1.composer require aliyuncs/oss-sdk-php
2.入口文件添加autoload.php文件
require_once __DIR__ . '/vendor/autoload.php';
3.引入命名空间
use OSS\OssClient; use OSS\Core\OssException;
4.添加对文件的上传管理
$accessKeyId = "<yourAccessKeyId>"; $accessKeySecret = "<yourAccessKeySecret>";// Endpoint以杭州为例,其它Region请按实际情况填写。$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// 存储空间名称$bucket= "<yourBucketName>";// 文件名称$object = "<yourObjectName>";// <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt$filePath = "<yourLocalFile>";try{ $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint); $ossClient->uploadFile($bucket, $object, $filePath); } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; }print(__FUNCTION__ . ": OK" . "\n");
通过上面的操作你就可以上传文件了,前提是你要开通oss功能,然后还要新建一个bucket就是相当于一个文件夹。
如果顺利的话,你就会在OSS后台看到你上传的文件,这里说明一个事情,如果你上传的是图片的话,默认它是会预览的,意思就是你在a标签里面点不会下载它,若果你想下载他,需要你指定Content-Disposition
代码如下:
$fromBucket = $bucket;
$fromObject = "oss-php-sdk-test/upload-test-object-name.txt";
$toBucket = $bucket;
$toObject = $fromObject;
$copyOptions = array(
OssClient::OSS_HEADERS => array(
'Expires' => '2012-10-01 08:00:00',
'Content-Disposition' => 'attachment; filename="xxxxxx"',
),
);
try {
$ossClient->copyObject($fromBucket, $fromObject, $toBucket, $toObject, $copyOptions);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");