关于在TP中使用webupload切片上传文件与CI框架中切片上传文件

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了关于在TP中使用webupload切片上传文件与CI框架中切片上传文件脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、在TP框架中使用切片上传

(1).HTML页面内容

<head>
<link href="/webuploader/webuploader.css" rel="stylesheet">
</head>
<body>
<div id="uploader" class="wu-example">
    <!--用来存放文件信息-->
    <div id="thelist" class="uploader-list"></div>
    <div class="BTns">
        <div id="picker">选择文件</div>
        <button id="ctlBtn" class="btn btn-default">开始上传    
       </button>
       </div>
</div>
<script tyPE="text/javascript" src="/webuploader/webuploader.js"></script>
<script type="text/javascript">
VAR $btn = $(#ctlBtn);
var uploader = WebUploader.create({

    // swf文件路径
    swf: /webuploader/Uploader.swf,// 文件接收服务端。
    server: uploaDFile,// 选择文件的按钮。可选。
    // 内部根据当前运行是创建,可能是input元素,也可能是flash.
    pick: #picker,chunked: true,//是否要分片处理大文件上传
    chunkSize:2*1024*1024,//分片上传,每片2M,认是5M
    fileSingleSizeLimIT: 10*1024* 1024 * 1024,// 不压缩image,认如果是jpeg,文件上传前会压缩一把再上传
    resize: false
});
// 当有文件添加进队列的时候
uploader.on( fileQueued,function( file ) {
    var $list = $(#thelist);
    $list.append( <div id=" + file.id + " class="item"> +
        <h4 class="info"> + file.name + </h4> +
        <p class="state">等待上传...</p> +
    </div> );
});
// 文件上传过程中创建进度条实时显示
uploader.on( uploadPRogress,function( file,percentage ) {
    var $li = $( #+file.id ),$percent = $li.find(.progress .progress-bar);

    // 避免重复创建
    if ( !$percent.length ) {
        $percent = $(<div class="progress progress-striped active"> +
          <div class="progress-bar" role="progressbar" style="width: 0%"> +
          </div> +
        </div>).appendTo( $li ).find(.progress-bar);
    }

    $li.find(p.state).text(上传);

    $percent.css( width,percentage * 100 + % );
});
uploader.on( uploadSuccess,function( file ) {
    $( #+file.id ).find(p.state).text(上传);
});

uploader.on( uploadError,function( file ) {
    $( #+file.id ).find(p.state).text(上传出错);
});

uploader.on( uploadcomplete,function( file ) {
    $( #+file.id ).find(.progress).fadeOut();
});

$btn.on(click,function(){
    if ($(this).hasClass(disabled)) {
        return false;
    }
    uploader.upload();
});
</script>
</body>

(2)PHP控制器的内容

public function sourceSave(){
        header("Expires: Mon,26 Jul 1997 05:00:00 GMT");
        header("Last-Modified: " . gmdate("D,d M Y H:i:s") . " GMT");
        header("Content-type: text/html; charset=gbk32");
        header("Cache-Control: no-Store,no-cache,must-revalidate");
        header("Cache-Control: post-check=0,pre-check=0",false);
        header("Pragma: no-cache");
        $folder = input(‘folder‘);
        if ($_SERVER[‘REQUEST_METHOD‘] == ‘OPTIONS‘) {
            exit; // finish preflight CORS requests here
        }
        if ( !empty($_REQUEST[ ‘debug‘ ]) ) {
            $random = rand(0,intval($_REQUEST[ ‘debug‘ ]) );
            if ( $random === 0 ) {
                header("HTTP/1.0 500 Internal Server Error");
                exit;
            }
        }
        // header("HTTP/1.0 500 Internal Server Error");
        // exit;
        // 5 minutes execution time
        set_time_limit(5 * 60);
        // Uncomment this one to fake upload time
        usleep(5000);
        // Settings
        $targetDir = ‘./Public‘.DIRECTORY_SEPARATOR.‘file_MATErial_tmp‘;            //存放分片临时目录
        if($folder){
            $uploadDir = ‘./Public‘.DIRECTORY_SEPARATOR.‘file_material‘.DIRECTORY_SEPARATOR.$folder.DIRECTORY_SEPARATOR.date(‘Ymd‘);
        }else{
            $uploadDir = ‘./Public‘.DIRECTORY_SEPARATOR.‘file_material‘.DIRECTORY_SEPARATOR.date(‘Ymd‘);    //分片合并存放目录
        }

        $cleanupTargetDir = true; // Remove old files
        $maxFileAge = 5 * 3600; // Temp file age in seconds

        // Create target dir
        if (!file_exists($targetDir)) {
            mkdir($targetDir,0777,true);
        }
        // Create target dir
        if (!file_exists($uploadDir)) {
            mkdir($uploadDir,true);
        }
        // Get a file name
        if (isset($_REQUEST["name"])) {
            $fileName = $_REQUEST["name"];
        } elseif (!empty($_FILES)) {
            $fileName = $_FILES["file"]["name"];
        } else {
            $fileName = uniqid("file_");
        }
        $oldName = $fileName;

        $fileName = iconv(‘UTF-8‘,‘gb2312‘,$fileName);
        $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
        // $uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName;
        // Chunking might be enabled
        $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
        $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1;
        // Remove old temp files
        if ($cleanupTargetDir) {
            if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
                die(‘{"jsonrpc" : "2.0","error" : {"code": 100,"message": "Failed to open temp directory111."},"id" : "id"}‘);
            }
            while (($file = readdir($dir)) !== false) {
                $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;
                // If temp file is current file proceed to the next
                if ($tmpfilePath == "{$filePath}_{$chunk}.part" || $tmpfilePath == "{$filePath}_{$chunk}.parttmp") {
                    continue;
                }
                // Remove temp file if it is older than the max age and is not the current file
                if (preg_match(‘/\.(part|parttmp)$/‘,$file) && (filemtime($tmpfilePath) < time() - $maxFileAge)) {
                    unlink($tmpfilePath);
                }
            }
            closedir($dir);
        }
        // Open temp file
        if (!$out = fopen("{$filePath}_{$chunk}.parttmp","wb")) {
            die(‘{"jsonrpc" : "2.0","error" : {"code": 102,"message": "Failed to open output stream222."},"id" : "id"}‘);
        }
        if (!empty($_FILES)) {
            if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
                die(‘{"jsonrpc" : "2.0","error" : {"code": 103,"message": "Failed to move uploaded file333."},"id" : "id"}‘);
            }
            // Read binary input stream and append it to temp file
            if (!$in = fopen($_FILES["file"]["tmp_name"],"rb")) {
                die(‘{"jsonrpc" : "2.0","error" : {"code": 101,"message": "Failed to open input stream444."},"id" : "id"}‘);
            }
        } else {
            if (!$in = fopen("PHP://input","message": "Failed to open input stream555."},"id" : "id"}‘);
            }
        }
        while ($buff = fread($in,4096)) {
            fwrite($out,$buff);
        }
        fclose($out);
        fclose($in);
        rename("{$filePath}_{$chunk}.parttmp","{$filePath}_{$chunk}.part");
        $index = 0;
        $done = true;
        for( $index = 0; $index < $chunks; $index++ ) {
            if ( !file_exists("{$filePath}_{$index}.part") ) {
                $done = false;
                break;
            }
        }

        if ($done) {
            $pathInfo = pathinfo($fileName);
            $hashStr = substr(md5($pathInfo[‘basename‘]),8,16);
            $hashName = time() . $hashStr . ‘.‘ .$pathInfo[‘extension‘];
            $uploadPath = $uploadDir . DIRECTORY_SEPARATOR .$hashName;
            if (!$out = fopen($uploadPath,"wb")) {
                die(‘{"jsonrpc" : "2.0","message": "Failed to open output stream666."},"id" : "id"}‘);
            }
            //flock($hander,LOCK_EX)文件
            if ( flock($out, LOCK_EX) ) {
                for( $index = 0; $index < $chunks; $index++ ) {
                    if (!$in = fopen("{$filePath}_{$index}.part","rb")) {
                        break;
                    }
                    while ($buff = fread($in,4096)) {
                        fwrite($out,$buff);
                    }
                    fclose($in);
                    unlink("{$filePath}_{$index}.part");
                }
                flock($out, LOCK_UN);
            }
            fclose($out);
            $response = [
                ‘success‘=>true,‘oldName‘=>$oldName,‘filePath‘=>$uploadPath,//                ‘fileSize‘=>$data[‘size‘],
                ‘fileSuffixes‘=>$pathInfo[‘extension‘],//文件后缀名
//                ‘file_id‘=>$data[‘id‘],
            ];
            return json($response);
        }

        // Return Success JSON-RPC response
        die(‘{"jsonrpc" : "2.0","result" : null,"id" : "id"}‘);
    }

二、在CI框架中使用切片上传

(1).这里直接写控制器里面的方法

public function uploadFile(){
        header("Access-Control-Allow-origin:*");
        //header("Access-Control-Allow-Credentials:true");
        //header(‘Access-Control-Allow-Headers:x-requested-with,content-type‘);
        header("Expires: Mon,d M Y H:i:s") . " GMT");
        header("Cache-Control: no-store,false);
        header("Pragma: no-cache");
 
        // Support CORS
        // header("Access-Control-Allow-Origin: *");
        // other CORS headers if any...
        if ($_SERVER[‘REQUEST_METHOD‘] == ‘OPTIONS‘) {
            exit; // finish preflight CORS requests here
        }
         
        if ( !empty($_REQUEST[ ‘debug‘ ]) ) {
            $random = rand(0,intval($_REQUEST[ ‘debug‘ ]) );
            if ( $random === 0 ) {
                header("HTTP/1.0 500 Internal Server Error");
                exit;
            }
        }
        //
        //var_dump($_REQUEST);
        //
        // header("HTTP/1.0 500 Internal Server Error");
        // exit;
         
        // 5 minutes execution time
        @set_time_limit(5 * 60);
         
        $targetDir = ‘./uploads/yinshua/upload_tmp‘;
        $uploadDir = ‘./uploads/yinshua‘;
         
        $cleanupTargetDir = true; // Remove old files
        $maxFileAge = 5 * 3600; // Temp file age in seconds
         
         
        // Create target dir
        if (!file_exists($targetDir)) {
            @mkdir($targetDir);
        }
         
        // Create target dir
        if (!file_exists($uploadDir)) {
            @mkdir($uploadDir);
        }
         
        // Get a file name
        if (isset($_REQUEST["name"])) {
            $fileName = $_REQUEST["name"];
        } elseif (!empty($_FILES)) {
            $fileName = $_FILES["file"]["name"];
        } else {
            $fileName = uniqid("file_");
        }
        $time = time();
        $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName;
        $uploadPath = $uploadDir . DIRECTORY_SEPARATOR .$time. $fileName;
         
        // Chunking might be enabled
        $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
        $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 1;
         
 
        // Remove old temp files
        if ($cleanupTargetDir) {
            if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
                die(‘{"jsonrpc" : "2.0","message": "Failed to open temp directory."},"id" : "id"}‘);
            }
         
            while (($file = readdir($dir)) !== false) {
                $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;
         
                // If temp file is current file proceed to the next
                if ($tmpfilePath == "{$filePath}_{$chunk}.part" || $tmpfilePath == "{$filePath}_{$chunk}.parttmp") {
                    continue;
                }
         
                // Remove temp file if it is older than the max age and is not the current file
                if (preg_match(‘/\.(part|parttmp)$/‘,$file) &amp;& (@filemtime($tmpfilePath) < time() - $maxFileAge)) {
                    @unlink($tmpfilePath);
                }
            }
            closedir($dir);
        }
 
 
        // Open temp file
        if (!$out = @fopen("{$filePath}_{$chunk}.parttmp","message": "Failed to open output stream."},"id" : "id"}‘);
        }
         
        if (!empty($_FILES)) {
            if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
                die(‘{"jsonrpc" : "2.0","message": "Failed to move uploaded file."},"id" : "id"}‘);
            }
         
        // Read binary input stream and append it to temp file
        if (!$in = @fopen($_FILES["file"]["tmp_name"],"rb")) {
            die(‘{"jsonrpc" : "2.0","message": "Failed to open input stream."},"id" : "id"}‘);
        }
        } else {
            if (!$in = @fopen("PHP://input","id" : "id"}‘);
            }
        }
         
        while ($buff = fread($in,$buff);
        }
         
        @fclose($out);
        @fclose($in);
         
        rename("{$filePath}_{$chunk}.parttmp","{$filePath}_{$chunk}.part");
         
        $index = 0;
        $done = true;
        for( $index = 0; $index < $chunks; $index++ ) {
            if ( !file_exists("{$filePath}_{$index}.part") ) {
                $done = false;
                break;
            }
        }
        if ( $done ) {
            if (!$out = @fopen($uploadPath,"id" : "id"}‘);
            }
         
            if ( flock($out, LOCK_EX) ) {
                for( $index = 0; $index < $chunks; $index++ ) {
                    if (!$in = @fopen("{$filePath}_{$index}.part","rb")) {
                        break;
                    }
         
                    while ($buff = fread($in,$buff);
                    }
         
                    @fclose($in);
                    @unlink("{$filePath}_{$index}.part");
                }
         
                flock($out, LOCK_UN);
            }
            @fclose($out);
        }
        $data = array(
            ‘jsonrpc‘=>"2.0",‘path‘ =>$uploadPath
        );
        echo json_encode($data,true);die;
        // Return Success JSON-RPC response   $uploadPath
        //die(‘{"jsonrpc" : "2.0","result" : $data,"id" : "id"}‘);

    }

脚本宝典总结

以上是脚本宝典为你收集整理的关于在TP中使用webupload切片上传文件与CI框架中切片上传文件全部内容,希望文章能够帮你解决关于在TP中使用webupload切片上传文件与CI框架中切片上传文件所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。