腾讯云对象存储:https://cloud.tencent.com/document/product/436/12266
把配置封装到config中
html页面
<!doctype html>
<html class="x-admin-sm">
<head>
<meta charset="UTF-8">
<title>后台登录-X-admin2.2</title>
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/>
<meta http-equiv="Cache-Control" content="no-siteapp"/>
<link rel="stylesheet" href="/static/css/font.css">
<link rel="stylesheet" href="/static/css/login.css">
<link rel="stylesheet" href="/static/css/xadmin.css">
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script src="/static/lib/layui/layui.js" charset="utf-8"></script>
<!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<style type="text/css">
.mask {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: #000;
opacity: 0.8;
filter: alpha(Opacity=80);
-moz-opacity: 0.8;
z-index: 999;
display: none;
}
.loading {
position: fixed;
width: 300px;
left: 50%;
margin-left: -150px;
top: 200px;
height: 18px;
border-radius: 10px;
background: #fff;
z-index: 9999;
overflow: hidden;
display: none;
}
</style>
</head>
<body>
<div class="layui-fluid">
<div class="layui-row">
<form class="layui-form" class="layui-form" method="post" action="">
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>优惠券名称</label>
<div class="layui-input-inline">
<input type="text" id="username" name="disname" required="" lay-verify="required" autocomplete="off"
class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>类型</label>
<div class="layui-input-inline">
<select id="shipping" name="type" class="valid">
<option value="通用券">通用券</option>
<option value="店铺券">店铺券</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label for="phone" class="layui-form-label">
<span class="x-red">*</span>优惠券面值</label>
<div class="layui-input-inline">
<input type="text" id="phone" name="price" required="" lay-verify="required" autocomplete="off"
class="layui-input"></div>
</div>
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>最低消费</label>
<div class="layui-input-inline">
<input type="text" id="username" name="miprice" required="" lay-verify="required" autocomplete="off"
class="layui-input"></div>
</div>
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">日期选择</label>
<div class="layui-input-block">
<input type="text" name="date" id="date1" autocomplete="off" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label for="username" class="layui-form-label">
<span class="x-red">*</span>排序</label>
<div class="layui-input-inline">
<input type="text" id="username" name="sort" required="" lay-verify="required"
autocomplete="off" class="layui-input"></div>
</div>
<input type="hidden" name="form_submit" value="ok"/>
<div class="layui-form-item">
<label class="layui-form-label">安装包:</label>
<input type="hidden" id="totalPage" value="0"/>
<input type="hidden" id="page" value="1"/>
<input type="hidden" id="status" value="0"/>
<div class="layui-input-block">
<button type="button" class="layui-btn" id="fileUpload"><i class="layui-icon"></i>上传文件</button>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">安装包名:</label>
<div class="layui-input-block">
<input type="text" name="name" id="name" value="" lay-verify="title" autocomplete="off"
readonly="true" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">下载地址</label>
<div class="layui-input-block">
<input type="text" name="downUrl" id="downUrl" value="" lay-verify="downUrl" autocomplete="off"
readonly="true" placeholder="" class="layui-input">
</div>
<div class="layui-form-item">
<label for="L_repass" class="layui-form-label"></label>
<button class="layui-btn" lay-filter="add" lay-submit="">增加</button>
</div>
</form>
</div>
</div>
<script>layui.use(['form', 'layer', 'laydate', 'upload', 'element'],
function () {
$ = layui.jquery;
var form = layui.form,
laydate = layui.laydate,
layer = layui.layer,
upload = layui.upload,
element = layui.element,
$ = layui.$;
//日期
laydate.render({
elem: '#date1'
});
//监听提交
form.on('submit(add)',
function (data) {
console.log(data);
$.ajax({
url: "{:url('cod')}",
data:{
// disname:
}
})
return false;
});
upload.render({
elem: '#fileUpload',
url: 'upload', //处理上传文件接口
accept: 'file',
auto: false,
acceptMime: '*.*',//允许上传的文件类型
choose: function (obj) {
element.progress('uploadProgress', '0%');
$('.mask').show();
$('.loading').show();
var data = this.data;
var files = obj.pushFile();
var LENGTH = 500 * 1024; //每片文件大小
obj.preview(function (index, file, result) {
var totalSize = file.size;
var totalPage = Math.ceil(totalSize / LENGTH);
$('#totalPage').val(totalPage);
$('#page').val('1');
$('#status').val('1');
var fileName = file.name;
$('#name').val(fileName);
var fileExt = fileName.substr(fileName.lastIndexOf('.') + 1);
fileName = fileName.substr(0, fileName.lastIndexOf('.'));
var progressTimer = setInterval(function () {
var totalPage = parseInt($('#totalPage').val());
var page = parseInt($('#page').val());
var status = $('#status').val();
if (parseInt(totalPage) == parseInt(page) && (parseInt(status) == 2 || parseInt(status) == -1)) {
clearInterval(progressTimer);
} else {
if (status == 1) {
$('#status').val('0');
data.fileName = fileName;
data.page = page;
data.totalPage = totalPage;
data.fileExt = fileExt;
obj.upload(index, file.slice((page - 1) * LENGTH, page * LENGTH));
}
}
}, 100);
});
},
done: function (res) {
if (res.status == 1) { //分片上传
var page = parseInt($('#page').val());
var totalPage = parseInt($('#totalPage').val());
element.progress('uploadProgress', Math.ceil(page * 100 / totalPage) + '%');
page = page + 1;
console.log(page);
$('#page').val(page);
$('#status').val('1');
} else if (res.status == 2) { //上传完成
element.progress('uploadProgress', '100%');
$('#status').val('2');
$('#downUrl').val(res.downUrl);
layer.msg('上传成功', {time: 1000, anim: 0}, function () {
$('.mask').hide();
$('.loading').hide();
});
} else { //上传错误
$('#status').val('-1');
element.progress('uploadProgress', '0%');
console.log(!typeof (res.downUrl) == "undefined");
if (typeof (res.downUrl) == "undefined") {
} else {
$('#downUrl').val(res.downUrl);
}
layer.msg("上传失败,请重试", {time: 3000, anim: 0}, function () {
$('.mask').hide();
$('.loading').hide();
});
}
},
error: function () {
$('.mask').hide();
$('.loading').hide();
}
});
});</script>
</body>
</html>
前提先要在publiv文件夹下创建tmp文件夹
控制器下
public function upload()
{
$path = \request()->file('file')->getPathname();
//处理分片上传文件
$status = 1;
//上传文件要保存的路径
$fname = sprintf(public_path() . 'tmp/%s.%s', $_POST['fileName'], $_POST['fileExt']);
$data = file_get_contents($_FILES['file']['tmp_name']);
if ($_POST['page'] == 1) {
file_put_contents($fname, $data);
} else {
//其余文件追加到文件末尾
file_put_contents($fname, $data, FILE_APPEND);
}
//最后一片文件
if ($_POST['totalPage'] == $_POST['page']) {
$status = 2;
}
//返回上传状态
$res = ['status' => $status, 'downUrl' => "http://localhost/data.dat"];
echo json_encode($res);
return Lib::set($fname);
}
service层下的
<?php
namespace app\service;
use Qcloud\Cos\Client;
class Lib
{
public static function set($path)
{
$secretId = config('setting.Tencent.secretId'); //"云 API 密钥 SecretId";
$secretKey = config('setting.Tencent.secretKey'); //"云 API 密钥 SecretKey";
$region = config('setting.Tencent.region'); //设置一个默认的存储桶地域
$cosClient = new Client(
array(
'region' => $region,
'schema' => 'https', //协议头部,默认为http
'credentials'=> array(
'secretId' => $secretId ,
'secretKey' => $secretKey)));
### 上传文件流
try {
$bucket = config('setting.Tencent.bucket'); //存储桶名称 格式:BucketName-APPID
$key = mt_rand(1,100).'.jpg'; //此处的 key 为对象键,对象键是对象在存储桶中的唯一标识
$srcPath = $path;//本地文件绝对路径
$file = fopen($srcPath, "rb");
if ($file) {
$result = $cosClient->putObject(array(
'Bucket' => $bucket,
'Key' => $key,
'Body' => $file));
return 'https://****'.$key;//返回路径
print_r($result);
}
} catch (\Exception $e) {
echo "$e\n";
}
}
}