You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.3 KiB
136 lines
4.3 KiB
2 years ago
|
<?php
|
||
|
|
||
|
namespace app\api\controller;
|
||
|
|
||
|
use app\common\controller\Api;
|
||
|
use app\common\exception\UploadException;
|
||
|
use app\common\library\Upload;
|
||
|
use think\Config;
|
||
|
|
||
|
/**
|
||
|
* 首页接口
|
||
|
*/
|
||
|
class Index extends Api
|
||
|
{
|
||
|
protected $noNeedLogin = ['*'];
|
||
|
protected $noNeedRight = ['*'];
|
||
|
|
||
|
/**
|
||
|
* 首页
|
||
|
*
|
||
|
*/
|
||
|
public function index()
|
||
|
{
|
||
|
$this->success('请求成功');
|
||
|
}
|
||
|
|
||
|
public function uploads()
|
||
|
{
|
||
|
// 获取base64
|
||
|
$img = $this->request->post('base64img');
|
||
|
if(!$img){
|
||
|
$this->error('参数缺失!');
|
||
|
}
|
||
|
//获取base64中图片数据
|
||
|
$url = explode(',', $img);
|
||
|
if(!isset($url[1])){
|
||
|
$this->error('参数有误!!');
|
||
|
}
|
||
|
//$img = str_replace(' ', '+', $img);
|
||
|
$data = base64_decode($url[1]);
|
||
|
|
||
|
if ($url[1] != base64_encode(base64_decode($url[1]))) {
|
||
|
$this->error('参数有误!');
|
||
|
}
|
||
|
|
||
|
$file_name = md5(microtime(true));// 图片名称
|
||
|
$this->createDir(ROOT_PATH . 'public/uploads/'.date("Ymd") ."/");
|
||
|
$path = ROOT_PATH . 'public/uploads/'.date("Ymd") ."/". $file_name. '.png'; // 图片保存路径
|
||
|
//$url = 'http://xxx.xx.xxx/uploads/'. date("Ymd") ."/" . $file_name . '.png'; // 用于访问图片的地址
|
||
|
|
||
|
$r = file_put_contents($path, $data);// 生成图片
|
||
|
if (!$r) {
|
||
|
$this->error("上传失败");
|
||
|
}else{
|
||
|
return $this->success(__('Uploaded successful'), ['url' => 'uploads/'.date("Ymd") ."/". $file_name. '.png']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function createDir($dir) {
|
||
|
if (!is_dir ($dir )) {
|
||
|
mkdir($dir, 0777, true);
|
||
|
chmod($dir, 0777);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 上传文件
|
||
|
* @ApiMethod (POST)
|
||
|
* @param File $file 文件流
|
||
|
*/
|
||
|
public function upload()
|
||
|
{
|
||
|
Config::set('default_return_type', 'json');
|
||
|
//必须设定cdnurl为空,否则cdnurl函数计算错误
|
||
|
Config::set('upload.cdnurl', '');
|
||
|
$chunkid = $this->request->post("chunkid");
|
||
|
if ($chunkid) {
|
||
|
if (!Config::get('upload.chunking')) {
|
||
|
$this->error(__('Chunk file disabled'));
|
||
|
}
|
||
|
$action = $this->request->post("action");
|
||
|
$chunkindex = $this->request->post("chunkindex/d");
|
||
|
$chunkcount = $this->request->post("chunkcount/d");
|
||
|
$filename = $this->request->post("filename");
|
||
|
$method = $this->request->method(true);
|
||
|
if ($action == 'merge') {
|
||
|
$attachment = null;
|
||
|
//合并分片文件
|
||
|
try {
|
||
|
$upload = new Upload();
|
||
|
$attachment = $upload->merge($chunkid, $chunkcount, $filename);
|
||
|
} catch (UploadException $e) {
|
||
|
$this->error($e->getMessage());
|
||
|
}
|
||
|
$this->success(__('Uploaded successful'), ['url' => $attachment->url, 'fullurl' => cdnurl($attachment->url, true)]);
|
||
|
} elseif ($method == 'clean') {
|
||
|
//删除冗余的分片文件
|
||
|
try {
|
||
|
$upload = new Upload();
|
||
|
$upload->clean($chunkid);
|
||
|
} catch (UploadException $e) {
|
||
|
$this->error($e->getMessage());
|
||
|
}
|
||
|
$this->success();
|
||
|
} else {
|
||
|
//上传分片文件
|
||
|
//默认普通上传文件
|
||
|
$file = $this->request->file('file');
|
||
|
try {
|
||
|
$upload = new Upload($file);
|
||
|
$upload->chunk($chunkid, $chunkindex, $chunkcount);
|
||
|
} catch (UploadException $e) {
|
||
|
$this->error($e->getMessage());
|
||
|
}
|
||
|
$this->success();
|
||
|
}
|
||
|
} else {
|
||
|
$attachment = null;
|
||
|
//默认普通上传文件
|
||
|
$file = $this->request->file('file');
|
||
|
|
||
|
//var_dump($file);die();
|
||
|
|
||
|
try {
|
||
|
$upload = new Upload($file);
|
||
|
$attachment = $upload->upload();
|
||
|
} catch (UploadException $e) {
|
||
|
$this->error($e->getMessage());
|
||
|
}
|
||
|
|
||
|
$this->success(__('Uploaded successful'), ['url' => $attachment->url, 'fullurl' => cdnurl($attachment->url, true)]);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|