zoukankan      html  css  js  c++  java
  • 大文件上传

    html页面:

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
    <form enctype="multipart/form-data">
        <table>
            <tr>
                <td>姓名</td>
                <td>
                    <input type="text" name="uname" class="uname" placeholder="姓名">
                </td>
            </tr>
            <tr>
                <td>年龄</td>
                <td>
                    <input type="text" name="age" class="age" placeholder="年龄">
                </td>
            </tr>
            <tr>
                <td>头像</td>
                <td>
                    <input type="file" name="img" id="img">
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="button" value="提交" class="sub">
                </td>
            </tr>
        </table>
    </form>
    <script src="jquery-3.3.1.min.js"></script>
    <script>
        $(".sub").click(function () {
            var uname = $(".uname").val();
            var age = $(".age").val();
    
            //创建formData对象(用来存储最终提交的数据信息)
            var fdObj = new FormData();
            //获取文件内容
            var file = document.getElementById('img').files[0];
    
            //定义一下切割图片的位置参数
            var start = 0;//开始位置
            var length = 1024*1024;//每次切割的大小
            var end = parseInt(start+length);
            var blob; //存储临时切割后的文件
            var blob_num = 1; //给每一个分割后的文件设定一个编号
    
            //执行文件的切割
            blob = cutFile(file);
            //执行文件的发送
            sendFile(blob,file);
    
            
            
            //定义一个切割的方法
            function cutFile(file) {
                var blob_file = file.slice(start,end);//切割出来一张图片
                //重新初始化一下开始位置和结束位置
                start = end;
                end = parseInt(start+length);
                //返回切割后的文件
                return blob_file;
            }
    
            //定义一个文件发送的方法
            function sendFile(blob,file) {
                fdObj.append("uname",uname);//表单数据
                fdObj.append("age",age);//表单数据
                fdObj.append("blob",blob);//临时切割后的文件
                fdObj.append("blob_num",blob_num);//切割后的文件编号
                fdObj.append("file_name",file.name);//文件名称
                fdObj.append("blob_count",Math.ceil(file.size/length));//切片的个数
    
                //ajax向后台发送
                $.ajax({
                    url:"upload.php",
                    type:"post",
                    dataType:"json",
                    data:fdObj,
                    processData:false,//不处理发送的数据
                    contentType:false,//不处理content-type
                    success:function (data) {
                        console.log(data)
                    }
                });
    
                //通过判断实现循环上传
                if(start<file.size){
                    //每秒钟上传一次
                    var t = setTimeout(function () {
                        //切片编号+1
                        blob_num++;
                        blob = cutFile(file);
                        sendFile(blob,file);
                    },1000)
                }else{
                    //清除所有效果
                    clearTimeout(t);
                }
            }
    
        });
    </script>
    </body>
    </html>

    php页面:

    <?php
    $data = $_POST;
    $file = $_FILES;
    
    //实现文件上传
    $path = './images/'.$data['file_name'].'_'.$data['blob_num'];
    move_uploaded_file($file['blob']['tmp_name'],$path);
    
    //切片的合并
    //只有当编号和切片的个数相等的时候,我们才会发起合并的代码
    if($data['blob_num']==$data['blob_count']){
        //合并
        $b = '';
        for ($i=1;$i<=$data['blob_count'];$i++){
            //读取每一个切片
            $b.=file_get_contents('./images/'.$data['file_name'].'_'.$i);
        }
        //合并后生成
        file_put_contents('./images/'.$data['file_name'],$b);
    }
    通往牛逼的路上,在意的只有远方!
  • 相关阅读:
    实现一个WEBIM
    拼写纠错
    UML系列图用例图
    [bzoj1670][Usaco2006 Oct]Building the Moat
    [bzoj3626][LNOI2014]LCA
    转:用JS写的一个树型结构
    一个购物车中修改商品数量的实列
    网站访问统计在Global.asax中的配置的深入讨论
    转:JavaScript中的三级联动
    转:用Sql Server存储上载图片字体
  • 原文地址:https://www.cnblogs.com/jiangshiguo/p/9922639.html
Copyright © 2011-2022 走看看