简写版的大文件上传

上传页面 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>大文件上传</title>
</head>
<body>
<input type="file" onchange="file(this)">
<button onclick="uplo()">上传</button>
</body>
</html>
<script>
    //文件的大小
    var size = '';
    function file(e){
        var file = e.files;
        //文件的对象
        fileList = file[0];
        //总大小
        size = fileList.size;
        //每个接片的大小
        setsize = 1000*1024;
        //总分数
        filecount = size/setsize;
        i=0;
    }
    function uplo(){
        console.log(i);
        var ajax = new XMLHttpRequest();
        var form = new FormData();
        if((size-i*setsize)>setsize){
                                                 //前一个   与  后一个  (间距)
            form.append('file',fileList.slice(i*setsize,(i+1)*setsize))
        }else{

                                                //最后的半个  与  最后一个(间距)
            form.append('file',fileList.slice(i*setsize,size));
            //最后一个的   总分数向下取整
            form.append('lastone',Math.floor(filecount));
        }

        //form里追加   一个切片的 名字
        form.append('blobname',i);
        //文件名
        form.append('filename',fileList.name);


        ajax.open('POST','1.php');
        //发送过去的数据
        ajax.send(form);
        ajax.onreadystatechange = function(){
            if(ajax.readyState==4 && ajax.status==200){
                if(ajax.responseText==1){
                    alert(1)
                }

                //判断切片数 是否小于总数
                if(i<filecount){
                    uplo();

                }
            }
        };
        i=i+1;
    }
</script>

后台处理的文件名   1.php

<?php
//接受文件名
$filename = $_POST['filename'];
//把文件名加密变成文件夹名  再生成路径
$dir = 'uploads/'.md5($filename);
if(!file_exists($dir)){
    mkdir($dir,0777,true);
}
//小文件要移动的位置
$path = $dir.'/'.$_POST['blobname'];
//移动文件
move_uploaded_file($_FILES['file']['tmp_name'],$path);

//判断lastone是否存在
if(isset($_POST['lastone'])){

    //lastone也是份数
    $count = $_POST['lastone'];
    //打开大文件
    $fp = fopen($_POST['filename'],'abw');
    for($i=0;$i<=$count;$i++){
        //打开小文件
        $handle = fopen($dir.'/'.$i,'rb');
        //读取小文件
        $read = fread($handle,filesize($dir.'/'.$i));
        //写入  小文件写入大文件
        fwrite($fp,$read);
        //关闭小文件
        fclose($handle);
        //删除小文件
        unlink($dir.'/'.$i);
    }
    //关闭大文件
    fclose($fp);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值