美文网首页
分片上传大视频文件

分片上传大视频文件

作者: 皮蛋馅儿 | 来源:发表于2019-11-29 15:59 被阅读0次

引入css

 <link href="https://cdn.bootcss.com/twitter-bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet">

html部分

<div style="width: 30%; margin-top: 20px">
    <form action="" enctype="multipart/form-data">
        <input type="file" id="file" name="file" accept=".mp4,.mp3">
        <button class="btn btn-success" id="uploadBtn" type="button">开始上传</button>
    </form>
    <div class="progress progress-striped active" style="margin-top: 10px;">
        <div id="video-profess" style="width: 0" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" role="progressbar" class="progress-bar progress-bar-danger">
            <span class="sr-only">40% Complete (success)</span>
        </div>
    </div>
</div>

js部分

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script>
    // 点击开始上传视频
    $("#uploadBtn").click(function () {
        var file = $("#file")[0].files;
        if (file.length <= 0) {
            return alert('请选择视频');
        }
        $(this).attr("disabled", true);
        var time = new Date().getTime().toString();
        // 按时间戳重命名(防止同个文件不断累加内容)
        var newFile = new File([file[0]], time + file[0].name, {type: file[0].type});
        upload(newFile, 1);
    });

    // 分片上传视频
    var upload = function (file, num) {
        var formData = new FormData();
        var blockSize = 2 * 1024 * 1000; // 每次2M
        var blockNum = Math.ceil(file.size / blockSize);
        var nextSize = Math.min(num * blockSize, file.size);
        var fileData = file.slice((num - 1) * blockSize, nextSize);
        formData.append("file", fileData);
        formData.append("filename", file.name);
        $.ajax({
            url: "upload.php",
            type: "POST",
            data: formData,
            processData: false,
            contentType: false,
            success: function (response) {
                if (response.code === 0) {
                    $('#video-profess').width((num * 100) / blockNum + '%');
                    if (file.size <= nextSize) {
                        alert('上传成功');
                        console.log(response.url)
                        $("#uploadBtn").removeAttr("disabled");
                        return;
                    }
                    upload(file, ++num);//递归调用
                } else {
                    alert('上传失败');
                }
            }
        });
    };
</script>

upload.php

<?php

header('Content-type: application/json');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
if (empty($_FILES) || !isset($_FILES['file'])) {
    exit(json_encode(['code' => -1, 'msg' => '请上传视频'], JSON_UNESCAPED_UNICODE));
}

$filename = $_POST['filename'];
$file = $_FILES['file'];

if ($file['error'] != 0) {
    exit(json_encode(['code' => -1, 'msg' => '请上传视频'], JSON_UNESCAPED_UNICODE));
}
$data = file_put_contents(__DIR__ . $filename, file_get_contents($file['tmp_name']), FILE_APPEND);
exit(json_encode(['code' => 0, 'msg' => 'success', 'data' => $data, 'url' => $filename], JSON_UNESCAPED_UNICODE));

加我微信公众号【皮蛋馅儿】,一起学习哦~

相关文章

  • 分片上传大视频文件

    引入css html部分 js部分 upload.php 加我微信公众号【皮蛋馅儿】,一起学习哦~

  • 细说分片上传与极速秒传(SpringBoot+Vue实现)

    预期目标 目标:需要突破服务端上传大小限制,实现大视频文件的上传 预期:大视频文件上传不受上传大小的限制 评估结果...

  • 确保自然顺序分片上传文件

    项目中涉及视频文件上传,相关服务端给的主要接口是 创建上传文件——分片上传文件流,一个大文件按照一定的大小分割每次...

  • java中oss分片上传(包含业务和详细讲解)

    背景: 前端上传音视频文件过大大于100MB。讨论后决定采用oss分片上传。 业务流程: 前端先调用一次初始化接口...

  • JS分片上传

    JS分片上传 //分片上传 function ScarecrowPatchUpload (uploadPath, ...

  • 文件分片上传.md

    文件分片上传 文件分片上传的总体思路是 先将文件通过blob.slice()方法将文件切割成多个分片。然后循环上传...

  • webuploader前端分片上传

    前端分片上传附件 分片上传定义: 所谓的分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块...

  • 阿里oss文件分片上传

    OSS文件分片上传 依赖 基础参数dto 具体上传方法 小文件上传 大文件上传,分片oss自己处理 处理逻辑:前段...

  • 分片视频上传

    对于facebook、twitter 上传视频api中,大视频都是需要分片上传,一次上传只能几Mb内, 并且是以 ...

  • 七牛云上传及上传方法封装

    分片及七牛云上传封装项目里面用到七牛云,有分片和简单上传 在此做下简单的记录,分享 下面是分片上传封装 proce...

网友评论

      本文标题:分片上传大视频文件

      本文链接:https://www.haomeiwen.com/subject/nikgwctx.html