tp6实现腾讯云存储与分片

腾讯云对象存储: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";
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值