由于七牛云存储使用了命名空间USE,命名空间是在PHP5.3才引入的,所以5.3之前的版本会报错的哦
第一、下载七牛云存储SDK对应的PHP版本
第二、解压文件(我重新命名为了qiniusdk),放到项目根目录
第三、确定上传文件的机制(HTML上传,后台上传)
第四、上传成功
详解第三步(以下代码全部与sdk同级目录):
HTML上传:
$token的生成:require_once __DIR__ . '/qiniusdk/autoload.php';
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
$accessKey = '换成你的';
$secretKey = '换成你的';
$auth = new Auth($accessKey, $secretKey);
$bucket = '换成你的存储空间';
$token = $auth->uploadToken($bucket);
?>点击上传之后,图片直接上传至七牛
如果需要获取到文件名以及自定义文件名可以增加一个上传策略
require_once __DIR__ . '/qiniusdk/autoload.php';
header('Access-Control-Allow-Origin:*');
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
$accessKey = 'XXX';
$secretKey = 'YYY';
$auth = new Auth($accessKey, $secretKey);
$bucket = 'ZZZ';
$newname = time().'.jpg';
$policy = array(
'saveKey'=>$newname,
'callbackUrl' => 'http://WWW.sinaapp.com/qiniu/callback.php',
'callbackBody' => "name=$(fname)&newname=$newname&toid=12"
);
$token = $auth->uploadToken($bucket,NULL, 3600, $policy);
?>
通过
地址回调获取参数,将id为12的用户头像的图片设置为$newname
callback.php
$callbackBody = file_get_contents('php://input');
//$callbackBodys = base64_encode(serialize($callbackBody));
$mysql = new SaeMysql();
$sql = "ddd";
$mysql->runSql($sql);
ECHO '{"success":true}';
exit;
至此一个通过html直接上传到七牛的小功能就实现了;
后台上传:
感觉绕来绕去的还是比较麻烦,索性后台直接调用接口直接上传,这里需要用到七牛SDK中UploadManager的一个新方法putFile
require_once __DIR__ . '/qiniusdk/autoload.php';
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
$accessKey = 'XX';
$secretKey = 'YY';
$auth = new Auth($accessKey, $secretKey);
$bucket = 'ZZ';
$token = $auth->uploadToken($bucket);
$uploadMgr = new UploadManager();
//print_r($_FILES['file']['tmp_name']);exit;
$filePath = $_FILES['file']['tmp_name'];//'./php-logo.png';
$key = 'php-logo.png';
list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
echo "\n====> putFile result: \n";
if ($err !== null) {
var_dump($err);
} else {
var_dump($ret);
}
html和上面的写法一样,只不过action地址改为自己的就可以了
七牛上传源码:https://github.com/rwifeng/qiniudocs/tree/master/demo/simpleuploader