js教程

slice大文件切割上传带进度条思路代码

我的站长站 2022-12-25 人阅读

前端HTML代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>大文件切割上传带进度条</title>
    <link rel="stylesheet" href="">
<script>
var xhr = new XMLHttpRequest();//xhr对象
var clock = null;
function selfile(){
    clock = window.setInterval(sendfile,1000);
}
var sendfile = (function (){
    const LENGTH = 1024 * 1024 * 10;//每次上传的大小
    var start = 0;//每次上传的开始字节
    var end = start + LENGTH;//每次上传的结尾字节
    var sending = false;//表示是否正在上传
    var fd = null;//创建表单数据对象
    var blob = null;//二进制对象
    var percent = 0;
    return (function (){
        //如果有块正在上传,则不进行上传
        if(sending == true){
            return;
        }
        var file = document.getElementsByName('video')[0].files[0];//文件对象
        //如果sta>file.size,就结束了
        if(start > file.size){
            clearInterval(clock);
            return;
        }
        blob = file.slice(start,end);//根据长度截取每次需要上传的数据
        fd = new FormData();//每一次需要重新创建
        fd.append('video',blob);//添加数据到fd对象中
        up(fd);
        //重新设置开始和结尾
        start = end;
        end = start + LENGTH;
        sending = false;//上传完了
        //显示进度条
        percent = 100 * start/file.size;
        if(percent>100){
            percent = 100;
        }
        document.getElementById('bar').style.width = percent + '%';
        document.getElementById('bar').innerHTML = parseInt(percent)+'%';
    });
})();
function up(fd){
    xhr.open('POST','13-slice-upload.php',false);
    xhr.send(fd);
}
</script>
<style>
    #progress{
        width:500px;
        height:30px;
        border:1px solid green;
    }
    #bar{
        width:0%;
        height:100%;
        background-color: green;
    }
</style>
</head>
<body>
    <h1>大文件切割上传带进度条</h1>
    <div id="progress">
        <div id="bar"></div>
    </div>
    <input type="file" name="video" onchange="selfile();" />
</body>
</html>

后端upload.php文件:

<?php
/**
 * 大文件切割上传,把每次上传的数据合并成一个文件
 * @author webbc
 */
$filename = './upload/upload.wmv';//确定上传的文件名
//第一次上传时没有文件,就创建文件,此后上传只需要把数据追加到此文件中
if(!file_exists($filename)){
    move_uploaded_file($_FILES['video']['tmp_name'],$filename);
}else{
    file_put_contents($filename,file_get_contents($_FILES['video']['tmp_name']),FILE_APPEND);
}
?>


相关推荐
  • js代码
  • 大文件上传
  • 进度条
  • js指定时间定时自动执行代码分享

    示例代码用的`setTimeout()`函数,在指定的时间后执行。代码非常的简单,获取当前时间和设定一个指定时间,指定时间减去当前时间就是定时的时间,如果定时器到期时等于0,就代表时间到了,就运行executeAtTime函数的方法。function executeAtTime() { console....

    js教程 40 6个月前
  • JS代码解除网页右键限制

    JS解除右键限制方法一javascript:(function () {function R(a) {ona = "on" + a;if (window.addEventListener){window.addEventListener(a, function (e) {for (var n = e.originalTarget; n; n = n.parentNode){n[ona] = null;}}, true);}window[o...

    js教程 171 3年前
  • 淘宝买家秀API+ajax代码

    淘宝买家秀API+ajax代码,用的是这个API,https://api.66mz8.com/api/rand.tbimg.php?format=jsonJSON返回格式,测试依旧可用。$(function(){ $.get('https://api.66mz8.com/api/rand.tbimg.php?format=json',function(data){ document.getElementB...

    js教程 713 3年前
  • php+ajax大文件分片上传示例代码

    代码思路PHP在上传超大的文件时,不能只让后端PHP上传,会容易上传到一半内测益处失效。需要前端要和后端相互配合一起来处理,文件上传要使用ajax的方法,而不是form的submit的方式。前端把file文件对象按一定的大小分割成一定大小的文件(如按2M或5M来分割),对...

    php教程 43 1年前
  • 宝塔面板环境上传大文件失败配置方法

    宝塔面板环境上传100M大小的文件,在上总是报错,但是在本地可以正常上传。上传小一点的文件,就不报错。代码和nginx和php的配置文件都设置了150M,超时时间也设置了,应该没啥问题。但就是报错。百度好久,网上说的答案都试了,没效果。解决方法1、fread()的方法...

    宝塔面板 183 1年前
  • php上传大文件必备配置方法

    项目要求如果你的项目需要用到大文件上传或下载功能,就必须首先修改PHP的配置才行,否则上传或下载操作就会超时,操作失败。操作步骤打开php配置文件php.ini,首先找到; file uploads ;区域,有影响文件上传的以下几个参数:file_uploads = on ;//是否允许...

    php教程 52 1年前
  • PHP大文件分片上传并带进度条功能示例

    html文件:<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>大文件切割上传带进度条</title> <link rel="stylesheet" href...

    php教程 48 1年前
  • Ajax实现文件上传进度条功能示例代码

    1. HTML代码<div class="form-group required"> <label class="col-sm-3 control-label">文件名:</label> <div class="col-sm-6"> <input id="fileName" name="fileName" class=&quot...

    js教程 48 1年前
  • 利用flush开发文件下载进度条功能示例

    原理就是分次读写,每次读多少字节,用socket保持与客户端通讯,利用flush()持续更新浏览器UI,返回已下载的数据大小,显示下载速度,以及进度条之类;<html><body><table border="1" width="300"><tr><td width="100">文件大小</td><td width="200"><div...

    php教程 40 1年前
最新更新
  • js截取字符串教程

    slice()方法接受两个参数,起始索引和结束索引(可选)。它返回从起始索引到结束索引(不包括结束索引)之间的子字符...

    js教程 2个月前
  • find findIndex indexOf索引选择器使用方法

    find使用方法find方法是ES6引入的一种数组方法,可以用来查找数组中符合条件的元素。语法是:array.find(callba...

    js教程 3个月前
  • js复制网页内容教程

    Async Clipboard API方法HTML5新增的方法,无需引入第三方插件,直接就可以复制内容。低版本的浏览器可能会不兼...

    js教程 3个月前
  • js获取字符长度函数分享

    js获取字符长度函数function objLen(str) { if (str == null) return 0; if (typeof str != "string") { ...

    js教程 3个月前
  • 网站LED跑马灯效果广告代码

    网站可以看到很多的论坛网站都会用到这种网站LED跑马灯效果,这种效果实现也很简单,分享给大家。LED跑马灯效果...

    js教程 4个月前