美文网首页
php大文件分块上传

php大文件分块上传

作者: 大萝卜2022 | 来源:发表于2022-11-02 09:41 被阅读0次

前端代码

<!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>

后端代码

<?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();

相关文章

  • 文件上传下载技术

    上传技术 1.直接上传 2.大文件上传 1)分块上传 主要分块数,快的大小,md5值(秒传实现) 2)断点上传 主...

  • 大文件分块上传

    大致步骤 1 图片分块 2 分块的图片 用formdata 保存在发后台 代码实现

  • 笔记

    一 、PHP上传大文件配置修改1、php.iniupload_max_filesize,post_max_size...

  • php+文件夹上传实例

    核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中...

  • linux php修改文件上传大小限制

    因为php web默认上传文件大小有限,需要上传大文件时需要修改php.ini文件。 一、 在php.ini文件中...

  • 大文件分块(切片)断点上传

    之前看过相关文章但是一直没有动手实现,这个东西就是为了实现这个而产生的。 前端流程图 主要技术点 切片 利用 Bl...

  • 2019-04-28

    基于nodom框架的大文件上传插件 重新封装了Ajax的post 方法 使用了blob对象的slice 对文件分块...

  • php 上传大文件注意事项

    php 上传大文件注意事项 php.ini 参数修改 post_max_size upload_max_files...

  • 一次 解决php无法上传大文件的 配置修改

    分4篇文章 均为转载 1.完美解决php无法上传大文件方法 http://www.php.cn/php-weiz...

  • php.ini设置详解

    php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...

网友评论

      本文标题:php大文件分块上传

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