侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php结合web uploader插件实现分片上传文件

php  /  管理员 发布于 7年前   133

最近研究了下大文件上传的方法,找到了webuploader js 插件进行大文件上传,大家也可以参考这篇文章进行学习:《Web Uploader文件上传插件使用详解》

使用

 使用webuploader分成简单直选要引入

HTML部分

选择文件

初始化Web Uploader

jQuery(function() {  $list = $('#thelist'),   $btn = $('#ctlBtn'),   state = 'pending',   uploader;  uploader = WebUploader.create({   // 不压缩image   resize: false,   // swf文件路径   swf: 'uploader.swf',   // 文件接收服务端。   server: upload.php,   // 选择文件的按钮。可选。   // 内部根据当前运行是创建,可能是input元素,也可能是flash.   pick: '#picker',   chunked: true,   chunkSize:2*1024*1024,   auto: true,   accept: {    title: 'Images',    extensions: 'gif,jpg,jpeg,bmp,png',    mimeTypes: 'image/*'   }  });

upload.php处理

以下是根据别人的例子自己拿来改的php 后台代码

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  header("Cache-Control: no-store, no-cache, must-revalidate");  header("Cache-Control: post-check=0, pre-check=0", false);  header("Pragma: no-cache");  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 = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";  $targetDir = 'uploads'.DIRECTORY_SEPARATOR.'file_material_tmp';  $uploadDir = 'uploads'.DIRECTORY_SEPARATOR.'file_material';  $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_");  }  $oldName = $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 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) && (@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 stream."}, "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 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", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');   }  } else {   if (!$in = @fopen("php://input", "rb")) {    die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "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", "error" : {"code": 102, "message": "Failed to open output stream."}, "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, 4096)) {      fwrite($out, $buff);     }     @fclose($in);     @unlink("{$filePath}_{$index}.part");    }    flock($out, LOCK_UN);   }   @fclose($out);   $response = [    'success'=>true,    'oldName'=>$oldName,    'filePaht'=>$uploadPath,    'fileSize'=>$data['size'],    'fileSuffixes'=>$pathInfo['extension'],    'file_id'=>$data['id'],    ];   die(json_encode($response));  }  // Return Success JSON-RPC response  die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');

更多关于PHP文件上传的精彩内容请关注专题《PHP文件上传操作汇总》,希望对大家有帮助。

以上就是本文的全部内容,希望对大家的学习有所帮助。

您可能感兴趣的文章:

  • php.ini修改php上传文件大小限制的方法详解
  • PHP 上传文件大小限制
  • php上传文件中文文件名乱码的解决方法
  • 使用ajaxfileupload.js实现ajax上传文件php版
  • PHP文件上传判断file是否己选择上传文件的方法
  • php环境无法上传文件的解决方法
  • windows下使用IIS配置的PHP无法上传文件的解决方法
  • php上传文件并存储到mysql数据库的方法
  • PHP实现ftp上传文件示例
  • 简单实现php上传文件功能


  • 上一条:
    理解php依赖注入和控制反转
    下一条:
    配置Nginx+PHP的正确思路与过程
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客