zoukankan      html  css  js  c++  java
  • php 大文件上传的实现

    1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc
    APC实现方法:

    • 安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明
    • 配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明
    • 代码范例:

    [php]if
    ($_SERVER[‘REQUEST_METHOD‘] == ‘POST‘)
    {
    //上传请求
    $status = apc_fetch(‘upload_‘ . $_POST[‘APC_UPLOAD_PROGRESS‘]);
        $status[‘done‘] = 1;
        echo
    json_encode($status);  //输出给用户端页面里的ajax调用,相关文档请自己寻找
    exit;
    }
    elseif
    (isset($_GET[‘progress_key‘]))
    {
    //读取上传进度
    $status = apc_fetch(‘upload_‘.$_GET[‘progress_key‘]);
        echo
    json_encode($status);
        exit;
    }
    else
    {
    //其他代码,比如上传表单等
    }[/php]


    2.使用PECL扩展模块uploadprogress实现(http://pecl.php.net/package/uploadprogress
    uploadprogress 模块实现方法:

    • 使用PECL模块安装方法安装该模块
    • php.ini里面设置 uploadprogress.file.filename_template = “/tmp/upd_%s.txt”
    • 代码范例:
    • [php]if($_SERVER[‘REQUEST_METHOD‘]==‘POST‘)
      {
      if
      (is_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘]))
      {
      $upload_dir = ‘your_path/‘;
              $ext        = strrchr($_FILES[‘video‘][‘name‘], ‘.‘);
              $sessid     = $_POST[‘UPLOAD_IDENTIFIER‘] ;
              $tmpfile    = $upload_dir . $sessid; 
              $sessfile   = $upload_dir . $sessid .$ext;
              if
      (move_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘],$tmpfile))
      {
      //上传成功
      }
      else
      {
      //上传失败
      }
      else
      {
      //上传错误
      }
      elseif
      (!empty($_GET[‘sessid‘]))
      {
      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“);
          header(“Content-Type:text/html;charset=UTF-8“);
    •     $unique_id = $_GET[‘sessid‘];
          $uploadvalues = uploadprogress_get_info($unique_id);
    •     if
      (is_array($uploadvalues))
      {
      echo
      json_encode($uploadvalues);
          }
      else
      {
      //读取进度失败,另外处理逻辑
      }
      }
      else
      {
      //显示上传表单
      }
      [/php]

    3.UGiA
    在他的官网有下详细的说明http://www.ugia.cn/?page_id=74

    理论上可以上传无限大的文件实时显示上传状态、进度支持多文件上传以及与表单混合上传方便的用户调用接口上传进度提供两种显示模式:新窗口或者内嵌式(0.3)多语言支持(0.21)兼容各种浏览器(经过测试的浏览器:IE5.0、IE6.0、Mozilla、Firefox、Opera)




    4XUploadFiles 
    最后一个是c#的组件,传说中很强大。http://www.blue999.com/xuploadfiles/index.htm

    • 支持上传时的断线续传功能
    • 支持多文件选择功能
    • 提供上传文件大小限制、文件个数限制、文件总数据量限制
    • 提供上传文件过滤功能:指定允许上传的文件类型,也可以指定不允许上传的文件类型
    • 显示上传进度条
    • 自动生成缩略图(在浏览器中生成,不占用服务器资源)
    • 支持对上传文件进行统计
    • 提供自定义上传文件名、自定义文件存储路径的功能
    • 提供自定义验证信息的功能
    • 支持Session、Cookie等操作
  • 相关阅读:
    [DB] 数据库的连接
    JS leetcode 翻转字符串里的单词 题解分析
    JS leetcode 拥有最多糖果的孩子 题解分析,六一快乐。
    JS leetcode 搜索插入位置 题解分析
    JS leetcode 杨辉三角Ⅱ 题解分析
    JS leetcode 寻找数组的中心索引 题解分析
    JS leetcode 移除元素 题解分析
    JS leetcode 最大连续1的个数 题解分析
    JS leetcode 两数之和 II
    JS leetcode 反转字符串 题解分析
  • 原文地址:https://www.cnblogs.com/nghygaojun/p/3322518.html
Copyright © 2011-2022 走看看