<dfn id="bq4sp"><code id="bq4sp"><dl id="bq4sp"></dl></code></dfn>
<menuitem id="bq4sp"><mark id="bq4sp"></mark></menuitem>

<menuitem id="bq4sp"></menuitem>
<abbr id="bq4sp"><button id="bq4sp"><pre id="bq4sp"></pre></button></abbr>
  • <strike id="bq4sp"><rt id="bq4sp"></rt></strike>
  • <nobr id="bq4sp"></nobr>
  • 国产亚洲tv在线观看,五月综合婷婷开心综合婷婷,嫩草院一区二区乱码,国产精品18久久久久久麻辣 ,国产精品剧情亚洲二区,国产美熟女乱又伦AV果冻传媒,国产福利高颜值在线观看,无码人妻丰满熟妇啪啪网不卡

    虛擬主機(jī) 如何上傳大于100M的文件 php網(wǎng)站程序

    問題

    1. 虛擬主機(jī)上傳文件大小限制100m,

    2. 有時(shí)會(huì)遇到非常大的文件上傳,上傳過(guò)程中耗時(shí)非常久,

    3. 可能服務(wù)器的限制設(shè)置了上傳文件尺寸,返回“413 request entity too large”

    整體邏輯

    1. 前端:上傳文件時(shí),進(jìn)行文件分片;發(fā)起請(qǐng)求時(shí),帶上第幾次分片上傳、總片數(shù)。

    2. 后端:按照分片進(jìn)行文件保存,當(dāng)上傳完最后一片數(shù)據(jù)時(shí),進(jìn)行文件合并,并刪除分片文


    示例代碼 下載:  http://downinfo.myhostadmin.net/upload.zip


    只是演示功能,生產(chǎn)環(huán)境需要加強(qiáng)上傳過(guò)濾


    前端 upload.html 

    <html>
    <head>
    <meta charset="utf-8">
    <title>分片上傳</title>
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    </head>
    <body>
    <form method="post" id="myForm" enctype="multipart/form-data">
        <input type="file" id="file" name="file">
        <input type="submit" id="submit" value="上傳">
    </form>
    
    
    <script type="text/javascript">
        $('#submit').on('click', function(e) {
            // 阻止默認(rèn)表單提交
            e.preventDefault();
    
            // 獲取屬性
            var myfile = $('#file')[0].files[0];
            var ext = myfile.name.split('.').pop();
            // 判斷ext是否為視頻
            var is_video = ['mp4', 'avi', 'rmvb', 'mkv'].indexOf(ext) > -1;
            var fileId = getFileIdentifier(myfile);
            // 數(shù)據(jù)切片
            var chunks = fileSlice(myfile, is_video);
            console.log(chunks)
            // 發(fā)送分割數(shù)據(jù)段
            sendChunk(fileId, chunks);
        })
        function getFileIdentifier(file){
         // 獲取文件標(biāo)識(shí)符
         return file.name
         //return file.size + file.name;
       }
       function fileSlice(file, is_video) {
         // 切片不宜過(guò)大,過(guò)大需要 nginx 以及 php 做相應(yīng)配置
            var chunkSize =  1024 * 1024 * 4;  //切片大小控制
            // 1.初始化數(shù)據(jù)
            var totalSize = file.size;
            var start = 0;
            var end = start + chunkSize;
            var chunks = [];
            // 2.使用bolb提供的slice方法切片
            while (start < totalSize) {
                if (is_video) {
                    console.log('視頻')
                    var chunk = file.slice(start, end, 'video/mp4');
                } else {
                    console.log('圖片')
                    var chunk = file.slice(start, end);
                }
                chunks.push(chunk);
                start = end;
                end += chunkSize;
            }
            // 3.返回切片組chunk[]
            return chunks;
        }
        function sendChunk(id, chunks){
            // 逐個(gè)提交
            // 用于保證ajax發(fā)送完畢
            var task = [];
            var totalPage=0;
            var i=0;
            totalPage=chunks.length-1;
            var fileExt = id.substr(id.lastIndexOf('.') + 1);
    
            chunks.forEach(function(chunk, index){
                var formData = new FormData();
                formData.append('file',chunk);
                formData.append("fileName",id);
                formData.append("totalPage",totalPage);
                formData.append("page",index);
                $.ajax({
                    type: "POST",
                    url: 'upload.php',
                    data: formData,
                    contentType: false,
                    processData: false,
                    dataType:"json",
                    async:false,
                    success: function(data){
                        // 移除已完成任務(wù)
                        task.pop();
                        if (data['status']==200){
                            console.log(data['downUrl']);
                            alert(data['downUrl']); //返回上傳文件路徑
                        }
                    }
                    })
                task.push('file Working');
            })
        }
    </script>
    </body>
    </html>

    后端 upload.php

    <?php
    if (empty($_POST)) {
        $res = ['status' => 500];
        echo json_encode($res);
        exit;
    }
    // 創(chuàng)建上傳目錄
    if(!is_dir('upload')){
       mkdir('upload', 0777);
     }
    // 創(chuàng)建上傳緩存目錄
    if(!is_dir('tmp')){
       mkdir('upload', 0777);
     }
     
    $fileName          = isset($_POST['fileName'])?$_POST['fileName']:'';
    $page              = isset($_POST['page'])?$_POST['page']:'';
    $totalPage         = isset($_POST['totalPage'])?$_POST['totalPage']:'';
    
    $fileTmpName       = isset($_FILES['file'])?$_FILES['file']['tmp_name']:'';
    
    $status  = 206;
    $downUrl = '';
    
    
    
    if ($fileName== ''|| $page == '' || $totalPage == '' || $fileTmpName == '') {
        $res = ['status' => 500];
        echo json_encode($res);
        exit();
    }
    
    
    
    
    // 上傳文件要保存的路徑
    $fname = sprintf('./tmp/%s-%s', $fileName, $page);
    $data  = file_get_contents($fileTmpName);
    file_put_contents($fname, $data);
    
    // 整合分片文件
    //if ($save) {
    if ($totalPage ==$page) {
        $uploadFileName = sprintf('./upload/%s%s', time(),$fileName); 
        $status         = 200;
        // 合并文件,刪除分片文件  
        for ($i = 0; $i<=$totalPage; $i++) {
            $tmp =  sprintf('./tmp/%s-%s', $fileName, $i);
            $data = file_get_contents($tmp);
            file_put_contents($uploadFileName, $data, FILE_APPEND);
            @unlink($tmp);
        }
    
        $dir = trim(dirname($_SERVER['PHP_SELF']), '/');
        if ($dir!='') {
          $dir .= '/';
        }
    
        $downUrl = sprintf('%s://%s/%s%s', $_SERVER['REQUEST_SCHEME'], $_SERVER['HTTP_HOST'], $dir,trim($uploadFileName, './'));
        $res = ['status' => $status,'downUrl' => $downUrl];
        echo json_encode($res);
        exit();
    }
    
    // 返回上傳狀態(tài)
    $res = ['status' => $status,'downUrl' => $downUrl];
    echo json_encode($res);


    運(yùn)行效果

    image.png


    編輯:三五互聯(lián)
    日期:2023-12-26

    收藏 】 【 打印 】   
    您可對(duì)文檔進(jìn)行評(píng)分喲~

    勾選遇到的問題提交給我們,收到反饋后保證及時(shí)修正更新!

    提交反饋需要先登陸會(huì)員帳號(hào)

    上一篇:如何將新網(wǎng)域名轉(zhuǎn)入三五互聯(lián)
    下一篇:聚名平臺(tái)域名外部入庫(kù)流程
    若文檔內(nèi)容對(duì)您沒有幫助,不能解決問題? 您還可以 咨詢?cè)诰客服提交工單搜索常見問題 ,我們將竭誠(chéng)為您服務(wù)。
      >> 相關(guān)文章
     
    分享至:
    主站蜘蛛池模板: 毛片免费观看天天干天天爽| 奎屯市| 四虎在线永久免费看精品| 中文字幕乱码中文乱码毛片| 亚洲熟妇自偷自拍另亚洲| 午夜免费福利小电影| 久久www免费人成看片中文| 强奷漂亮人妻系列老师| 免费黄色大全一区二区三区| 亚洲人成电影在线天堂色| 亚洲欧洲日产国码久在线| 日韩人妻无码精品久久久不卡| 亚洲成a人v欧美综合天堂下载| 欧美色丁香| 天堂资源国产老熟女在线| 国产重口老太和小伙| 诏安县| 国产内射xxxxx在线| 欧美激情一区二区三区成人| 男人+高清无码+一区二区| 男女性杂交内射女bbwxz| 一个色综合国产色综合| 欧美精欧美乱码一二三四区| 国产成人a在线观看视频免费| 成人网站免费观看| 高潮迭起av乳颜射后入| 日韩乱码视频一区二区三区| 一亚洲一区二区中文字幕| 国产午夜福利免费入口| 亚洲伊人久久综合成人| 国产又粗又猛又爽又黄| 亚洲蜜臀av乱码久久| 熟女亚洲综合精品伊人久久| 日韩女同在线二区三区| 亚洲一区在线成人av| XXXXXHD亚洲日本HD| 99久久亚洲综合精品成人网| 国产亚洲精品中文字幕| 久久久综合九色合综| 四虎国产精品久久免费地址| 久久精品国产再热青青青|