télécharger bloc php

Introduire le principe de

Bloc téléchargé papier est utilisé html5dans filele fichier d'objet est divisée en blocs, puis bloquer une de téléchargement, recevoir chacun l'extrémité arrière de l'envoi de fichier est déterminé si le bloc est chargé, le téléchargement de fichiers et de supprimer tout complet du bloc de fusion.

structure de répertoire démo

index.php
upload.php
uplod
    block

Code frontal

index.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分片上传</title>
</head>
<body>
    选择文件:
    <input type="file" name="file" id="upload"> <span>等待上传...</span>
    <script src="http://zui.sexy/assets/jquery.js"></script>
    <script type="text/javascript">
        $('#upload').on('change', function() {
            // 文件对象
            var file = $('#upload')[0].files[0];
            // 分块的大小 默认4M
            var block = 1024 * 1024 * 1;
            // 文件大小
            var fileSize = file.size;
            // 总的分块数
            var totalCount = Math.ceil(fileSize / block);
            var start = 0,
                end = 0;
            // 原文件名
            var fileName = file.name;
            // 生成随机的前缀
            var prfix = Math.random();
            for(var num = 0; num < totalCount; num++) {
                start = num * block;
                end = start + block;
                blockFile = file.slice(start, end);
                // 组装 FormData() 对象
                var formData = new FormData();
                formData.append('file', blockFile);
                formData.append('num', num);
                formData.append('fileName', fileName);
                formData.append('prfix', prfix);
                formData.append('totalCount', totalCount);
                $.ajax({
                    url: 'upload.php',
                    type: 'post',
                    data: formData,
                    processData:false,
                    contentType:false,
                    dataType: 'json',
                    successs: function(msg) {
                        console.log(msg);
                    },
                    error: function(err) {
                        console.log(err);
                    }
                });

            }
        });
    </script>
</body>
</html>

Code back-end

<?php
class UploadFile
{
    public function upload()
    {
        // 接收 post 参数
        $data = $_POST;
        // 文件信息
        $file = $_FILES;
        // 分块文件上传
        move_uploaded_file($file['file']['tmp_name'], 'upload/block/' . $data['prfix'] . '_' . $data['num']);
        $done = 0;
        // 判断文件是否上传完成
        if ($data['num'] == ($data['totalCount'] - 1)) {
            // 新的文件名
            $ext = pathinfo($data['fileName'], PATHINFO_EXTENSION);
            $newFileName = $data['prfix'] . '.' . $ext;
           // 合并文件
           for($i = 0; $i < $data['totalCount']; $i++) {
                file_put_contents('upload/' . $newFileName, file_get_contents('upload/block/' . $data['prfix'] . '_' . $i));
           }
           // 合并完成后删除分块文件
           for($i = 0; $i < $data['totalCount']; $i++) {
               unlink('upload/block/' . $data['prfix'] . '_' . $i);
           }
           $done = 1;
        }

        echo json_encode([
            'code' => 0,
            'msg' => '文件上传',
            'data' => [
                'donw' => $done,
            ]
        ]);
        
    }

    public function fileExists($fileName)
    {
        if (file_exists('upload/' . $fileName)) {
            return true;
        }
        return false;
    }

    public function dirExists($dir)
    {
        if (!is_dir($dir)) {
            mkdir('upload/' . $dir);
        }
        return true;
    }
}

$upload = new UploadFile();
$upload->upload();
Publié 48 articles originaux · louange gagné 13 · vues 10000 +

Je suppose que tu aimes

Origine blog.csdn.net/weixin_37825371/article/details/104926207
conseillé
Classement