作者 郭文星

123

<?php
namespace Qiniu;
namespace addons\qiniu\library\Qiniu;
use Qiniu\Zone;
final class Auth
{
private $accessKey;
... ... @@ -22,12 +23,12 @@ final class Auth
public function sign($data)
{
$hmac = hash_hmac('sha1', $data, $this->secretKey, true);
return $this->accessKey . ':' . \Qiniu\base64_urlSafeEncode($hmac);
return $this->accessKey . ':' .$this->base64_urlSafeEncode($hmac);
}
public function signWithData($data)
{
$encodedData = \Qiniu\base64_urlSafeEncode($data);
$encodedData =$this->base64_urlSafeEncode($data);
return $this->sign($encodedData) . ':' . $encodedData;
}
... ... @@ -184,4 +185,11 @@ final class Auth
$auth = 'Qiniu ' . $sign;
return array('Authorization' => $auth);
}
function base64_urlSafeEncode($data)
{
$find = array('+', '/');
$replace = array('-', '_');
return str_replace($find, $replace, base64_encode($data));
}
}
... ...
<?php
namespace Qiniu;
namespace addons\qiniu\library\Qiniu;
final class Config
{
const SDK_VER = '7.2.10';
... ...
<?php
namespace Qiniu\Http;
use Qiniu\Config;
use Qiniu\Http\Request;
use Qiniu\Http\Response;
namespace addons\qiniu\library\Qiniu\Http;
use addons\qiniu\library\Qiniu\Config;
use addons\qiniu\library\Qiniu\Http\Request;
use addons\qiniu\library\Qiniu\Http\Response;
final class Client
{
... ...
<?php
namespace Qiniu\Http;
namespace addons\qiniu\library\Qiniu\Http;
/**
* 七牛业务请求逻辑错误封装类,主要用来解析API请求返回如下的内容:
... ...
<?php
namespace Qiniu\Http;
namespace addons\qiniu\library\Qiniu\Http;
final class Request
{
public $url;
... ...
<?php
namespace Qiniu\Http;
namespace addons\qiniu\library\Qiniu\Http;
/**
* HTTP response Object
*/
... ... @@ -130,7 +129,7 @@ final class Response
private static function bodyJson($body)
{
return \Qiniu\json_decode((string) $body, true, 512);
return json_decode((string) $body, true, 512);
}
public function xVia()
... ...
<?php
namespace Qiniu;
use Qiniu\Http\Client;
use Qiniu\Http\Error;
namespace addons\qiniu\library\Qiniu;
use addons\qiniu\library\Qiniu\Http\Client;
use addons\qiniu\library\Qiniu\Http\Error;
class Region
{
... ...
<?php
namespace Qiniu\Storage;
use Qiniu\Config;
use Qiniu\Http\Client;
use Qiniu\Http\Error;
namespace addons\qiniu\library\Qiniu\Storage;
use addons\qiniu\library\Qiniu\Config;
use addons\qiniu\library\Qiniu\Http\Client;
use addons\qiniu\library\Qiniu\Http\Error;
use function Qiniu\base64_urlSafeDecode;
use function Qiniu\json_decode;
final class FormUploader
{
... ... @@ -34,15 +36,30 @@ final class FormUploader
}
//enable crc32 check by default
$fields['crc32'] = \Qiniu\crc32_data($data);
$hash = hash('crc32b', $data);
$array = unpack('N', pack('H*', $hash));
$fields['crc32']= sprintf('%u', $array[1]);
if ($params) {
foreach ($params as $k => $v) {
$fields[$k] = $v;
}
}
list($accessKey, $bucket, $err) = \Qiniu\explodeUpToken($upToken);
$items = explode(':', $upToken);
if (count($items) != 3) {
return array(null, null, "invalid uptoken");
}
$accessKey = $items[0];
$find = array('-', '_');
$replace = array('+', '/');
$putPolicy = \json_decode(base64_decode(str_replace($find, $replace, $items[2])));
$scope = $putPolicy->scope;
$scopeItems = explode(':', $scope);
$bucket = $scopeItems[0];
list($accessKey, $bucket, $err) = array($accessKey, $bucket, null);
if ($err != null) {
return array(null, $err);
}
... ... @@ -119,4 +136,10 @@ final class FormUploader
return $value;
}
function crc32_data($data)
{
$hash = hash('crc32b', $data);
$array = unpack('N', pack('H*', $hash));
return sprintf('%u', $array[1]);
}
}
... ...
<?php
namespace Qiniu\Storage;
use Qiniu\Config;
namespace addons\qiniu\library\Qiniu\Storage;
use addons\qiniu\library\Qiniu\Config;
use Qiniu\Http\HttpClient;
use Qiniu\Storage\ResumeUploader;
use Qiniu\Storage\FormUploader;
use addons\qiniu\library\Qiniu\Storage\FormUploader;
/**
* 主要涉及了资源上传接口的实现
... ...
<?php
namespace Qiniu;
use Qiniu\Region;
namespace addons\qiniu\library\Qiniu;
use addons\qiniu\library\Qiniu\Region;
class Zone extends Region
{
... ...
... ... @@ -16,9 +16,9 @@ use app\common\library\Upload;
use fast\Tree;
use think\Config;
use think\Db;
use addons\qiniu\library\Qiniu\Auth as QAuth;
use think\Request;
use Qiniu\Auth as QAuth;
use Qiniu\Storage\UploadManager;
use addons\qiniu\library\Qiniu\Storage\UploadManager;
/**
*
... ... @@ -50,22 +50,20 @@ class Task extends Api
* 文件上传
*
*/
public function fileUpload()
public static function fileUpload($file)
{
// file_put_contents("test_upload.log","00:".date("Ymd H:i:s").PHP_EOL,FILE_APPEND);
if ($this->request->isPost()) {
$file = request()->file('file');
$data['oldname'] = request()->post('fileName');
//$data['oldname'] = request()->post('fileName');
// file_put_contents("test_upload.log","一:".date("Ymd H:i:s").json_encode($file).PHP_EOL,FILE_APPEND);
// file_put_contents("test_upload.log","二:".date("Ymd H:i:s").json_encode($data).PHP_EOL,FILE_APPEND);
if (empty($file)) {
$this->error('请选择上传文件');
return ;
}
//移动到框架应用根目录/public/uploads/目录下
$info = $file->validate(['ext' => 'jpeg,jpg,png,bmp,doc,docx,pdf,ppt,pptx,xls,xlsx,zip,rar,7z,mp3,mp4,mov'])->move(ROOT_PATH . 'public' . DS . 'uploads');
//$info = $file->validate(['ext' => 'jpeg,jpg,png,bmp,doc,docx,pdf,ppt,pptx,xls,xlsx,zip,rar,7z,mp3,mp4,mov'])->move(ROOT_PATH . 'public' . DS . 'uploads');
// file_put_contents("test_upload.log","三:".date("Ymd H:i:s").json_encode($data).PHP_EOL,FILE_APPEND);
... ... @@ -77,23 +75,21 @@ class Task extends Api
// 构建 UploadManager 对象
$uploadMgr = new UploadManager();
if ($info) {
$filepath = ROOT_PATH . 'public/uploads/' . date('Ymd', time()) . '/' . $info->getFilename();
$fname = 'uploads/' . date('Ymd', time()) . '/' . $info->getFilename();
if ($file) {
$filepath = ROOT_PATH . 'public/uploads/' . $file;
$fname = 'uploads/' . date('Ymd', time()) . '/' . $file;
list($ret, $err) = $uploadMgr->putFile($token, $fname, $filepath);
$data['filepath'] = $domain . $ret['key'];
$data['fileurl'] = '/' . $ret['key'];
$data['fileurl'] = $ret['key'];
$path = '../public' . $data['fileurl'];
is_file($path) && unlink($path);//删除服务器上文件
$this->success('文件上传成功', $data);
return $data;
} else {
//上传失败获取错误信息
// file_put_contents("test_upload.log","四:".$file->getError().PHP_EOL,FILE_APPEND);
$this->error($file->getError());
}
return;
}
}
/**
... ...
... ... @@ -8,6 +8,7 @@
namespace app\api\controller\v1;
use app\api\controller\inspection\Task;
use lib\WXBizDataCrypt;
use think\Db;
use think\Request;
... ... @@ -215,31 +216,29 @@ class Login extends Base
->where("id", $user_id)
->update([
"username" => $username,
"avatar" => $avatar,
"avatar" => $avatar['fileurl'],
"nickname" => $username,
]);
$this->success("请求成功");
}
public function uploadBase64($base64Str)
{
// 将Base64字符串转换为文件并保存
if ($base64Str) {
// 获取Base64字符串的类型
preg_match('/^data:image\/(.*);base64/', $base64Str, $match);
$ext = $match[1];
// 生成文件名
$fileName = uniqid() . '.' . $ext;
// 获取项目根目录
//$rootPath = root_path();
// 保存文件路径
$filePath = ROOT_PATH . 'public/uploads/' . $fileName;
// 保存文件
file_put_contents($filePath, base64_decode(str_replace($match[0], '', $base64Str)));
return "uploads/".$fileName;
$task=new Task();
$res=$task->fileUpload($fileName);
return $res;
}
}
... ...