安装sdk
composer require qiniu/php-sdk
后端上传:
<?php
namespace app\api\controller;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
class Qn
{
static private $accessKey = "CqfperBEHyoU8u7x5uvyjb6r2XCYaz**********";
static private $secretKey = "lVMaQWHoIDlOLN1AGOM3B0GKG30NQa**********";
static private $bucket = "qncdn369";
static private $http_host = "";
//获取上传凭证后表单上传
public function token()
{
$auth = new Auth(self::$accessKey, self::$secretKey);
$token = $auth->uploadToken(self::$bucket);
return json(['status' => 1, 'msg' => '成功', 'data' => $token]);
}
//服务器直传
public function up()
{
if(empty($_FILES['file']['tmp_name'])) return json(['status' => 0, 'msg' => '请上传文件', 'data' => '']);
// 需要填写你的 Access Key 和 Secret Key
$accessKey = self::$accessKey;
$secretKey = self::$secretKey;
$bucket = self::$bucket;
// 构建鉴权对象
$auth = new Auth($accessKey, $secretKey);
// 生成上传 Token
$token = $auth->uploadToken($bucket);
// 要上传文件的本地路径
$filePath = $_FILES['file']['tmp_name'];
// 上传到存储后保存的文件名
$key = randString(16);
// 初始化 UploadManager 对象并进行文件的上传。
$uploadMgr = new UploadManager();
// 调用 UploadManager 的 putFile 方法进行文件的上传。
list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
if ($err !== null) {
return json(['status' => 0, 'msg' => '上传失败', 'data' => '']);
} else {
return json(['status' => 1, 'msg' => '上传成功', 'data' => ['url'=>self::$http_host.$key]]);
}
}
}
前端form表单上传:
<form method="post" id="uploadForm" action="http://up.qiniup.com/" enctype="multipart/form-data">
<input name="key" type="hidden" value="{$resource_key}">
<input name="token" type="hidden" value="{$upload_token}">
<input name="crc32" type="hidden"/>
<input name="accept" type="hidden"/>
<input name="file" type="file"/>
<input type="submit" value="上传文件"/>
</form>
<button onClick="up()">上传</button>
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function up() {
var formData = new FormData(document.getElementById("uploadForm"));
$.ajax({
url: "http://up.qiniup.com/",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function (data) {
console.log(data)
},
error: function (data) {
console.log(data)
}
});
}
</script>