PHP 文件上传进度条实现程序

PHP 文件上传进度条实现程序
PHP 文件上传进度条实现程序

PHP 文件上传进度条实现程序

在php中要实现上传进度条有很多方法,如ajax是现在的主流或利用iframe来实现,现在我们来介绍php的apc与uploadprogress实现文件上传进度条效果。

目前我知道的方法有两种,一种是使用PHP的创始人Rasmus Lerdorf 写的APC扩展模块来实现(https://www.360docs.net/doc/0918665539.html,/package/apc),另外一种方法是使用PECL扩展模块

uploadprogress实现(https://www.360docs.net/doc/0918665539.html,/package/uploadprogress)我这里举两个分别实现的例子供参考,更灵活的应用根据自己需要来修改。

APC实现方法:

安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明

配置php.ini,设置参数apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明

代码范例:

代码如下复制代码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 {

//其他代码,比如上传表单等

}

uploadprogress 模块实现方法:

使用PECL模块安装方法安装该模块

php.ini里面设置uploadprogress.file.filename_template = “/tmp/upd_%s.txt”

代码范例:

代码如下复制代码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 {

//显示上传表单

}

整合

现在剩下的只是要把所有内容hook 到一起。您可以通过progress.php 页面来完成此操作。

清单5. 最终的progress.php 页面

代码如下复制代码

$id = uniqid("");

?>

Upload Example



"width: 500px; height: 20px; border: 6px solid red; display:none;">

"position: relative; height: 20px; background-color: purple; width: 0%; ">

从底层开始向上层工作,我们已经添加了嵌入清单1 中的upload.php 脚本的iframe,给它提供了在页面顶部生成的惟一ID。

现在,是否还记得该表单中的Submit 按钮?

代码如下复制代码

type="submit" value="Upload!"/>

该按钮将完成两项工作。提交表单,像普通的Submit 按钮一样;但在执行该操作之前,

它将在主窗口中调用startProgress() 脚本。startProgress() 脚本将告诉进度条显示自身——开始时无显示属性,然后告诉浏览器等待一秒,然后再执行getProgress() 脚本。现在,getProgress() 脚本将使事情变得有趣。记不记得在前面我说过将需要使用Ajax 或某种类似的方法来检查文件的进度?对,在本例中,表单将采用捷径,调用来自Google Maps API 库的GdownloadUrl() 函数(注意,表单将导入位于页面顶部的库。您将需要获得自己的访问此库的密钥,但是它是从Google 免费获取的)。

此函数将下载URL 的内容——本例中为getprogress.php 脚本——并执行在其中定义的匿名函数。函数所接受的第一个参数是从URL 返回的数据,本例中为百分比,以便使用它更新进度条。最后,如果文件尚未完成下载,则告诉浏览器每十分之一秒重试一次(在实际情况中,可能无法那么快地执行这些调用,但是浏览器将尽其所能进行操作)。

最终结果是页面使用户可以查看文件正被上传的进度。

如果文件太大了我们可以如下操作:

PHP限制上传文件大小第一:

在php.ini里面查看如下行:

upload_max_filesize = 8M

post_max_size = 10M

memory_limit = 20M

把这些值改成我所说的,看看有没有问题,另外要确认上传的

里没有类似下面的这行

这样也是限制上传大小用的。

PHP限制上传文件大小第二:

如果是apache 2 需要修改

/etc/httpd/conf.d/php.conf

中的LimitRequestBody 524288将524288(=512×1024)改大,比如5M(=5×1024×1024)在PHP限制上传文件大小之后,文件上传就不会出现如上问题,上传不响应,上传现实该页无法现实也将得到解决!

PHP 文件上传进度条实现程序

PHP 文件上传进度条实现程序 在php中要实现上传进度条有很多方法,如ajax是现在的主流或利用iframe来实现,现在我们来介绍php的apc与uploadprogress实现文件上传进度条效果。 目前我知道的方法有两种,一种是使用PHP的创始人Rasmus Lerdorf 写的APC扩展模块来实现(https://www.360docs.net/doc/0918665539.html,/package/apc),另外一种方法是使用PECL扩展模块 uploadprogress实现(https://www.360docs.net/doc/0918665539.html,/package/uploadprogress)我这里举两个分别实现的例子供参考,更灵活的应用根据自己需要来修改。 APC实现方法: 安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明 配置php.ini,设置参数apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明 代码范例: 代码如下复制代码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);

php文件上传(详细方法)

必须用post。 * 2.表单上传需要使用类型为file的input * 3.enctype="multipart/form-data"只有文件上传时才用这个,用来指定表单编码的数据方式。让服务器知道我们要传递文件。 *并带有一些常规的信息。加在form里面和method一样。*三、php处理上传的数据 *$_POST提取post方法提交的的表单数据,如果是文件上传的数据则使用$_FILES接收文件,而$_POST接收 *非文件数据。所以当要上传文件时用两种方法接收数据。点击上传后只要将临时文件移动到目标文件夹中就成功了。 *array(size=4) 'shopname'=>string'得到'(length=6) 'shoppri'=>string'得到'(length=6) 'shopnum'=>string'得到'(length=6) 'sub'=>string'添加商品'(length=12) array(size=1) 'pic'=> array(size=5) 'name'=>string'11112907_124211588000_2[1].jpg' (length=30)

Java多方式实现文件上传

在Struts 2中实现文件上传 前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。 实现原理 Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现 前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。以下是例子所依赖类包的列表: 清单1 依赖类包的列表 首先,创建文件上传页面FileUpload.jsp,内容如下: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %> <% @ taglib prefix = " s " uri = " /struts-tags " %> Struts 2 File Upload

JAVA中几种上传方法介绍、比较

java中几种上传方法介绍、比较 1引言 一个网站总是不可避免的要和用户进行信息的交互,能直接使用 request.getParameter()来取得。至于所使用的方法有很多种,比如:jspsmart 公司的jspsmartupload组件,O`Rrilly公司的cos组件,Jakarta Apache公司的commonsFileUpload组件,JavaZoom的uploadbean组件,还有Struts组件中自带的org.apache.struts.upload类工具等等。下面就针对其中的三种解决方案(jspsmartupload、O`Reilly-cos、struts.upload)做一个简单的介绍和对比。2O`Rrilly-Cos Cos组件是O`Rrilly公司开发的,该组件免费,不定期增加新功能,开源。 图1O`Rrilly-Cos 在Cos组件中,MultipartRequest类主要负责文件上传的处理。MultipartRequest有8个构造函数: 1.Public MultipartRequest(HttpServletRequest request,String saveDirectory,)throws IOException 2.Public MultipartRequest(HttpServletRequest request,String saveDirectory,int maxPostSize)throws IOException 3.Public MultipartRequest(HttpServletRequest request,String saveDirectory,int maxPostSize,FileRenamePolicy policy)throws IOException倘若是从窗体传送一般的简单输入类型(例如:text、password、radio、checkbox、select等等)的信息到服务器端时,只要使用 application/x-www-form-urlencoded的编码方式用session传递就可以了。但是当涉及到和用户之间的文件交换(包括上传和下载)时,就不是那么简单了。在上传文件到服务器时,必须要使用multipart/form-data的编码方式,并且不

文件上传漏洞及解析漏洞总结

文件上传漏洞及解析漏洞总结 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。 文件上传后导致的常见安全问题一般有: 1)上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。 2)上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似); 3)上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。 4)上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本;等等。 要完成这个攻击,要满足以下几个条件: 首先,上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。 其次,用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。 最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。 一、从FCKEditor文件上传漏洞谈起 FCKEditor是一款非常流行的富文本编辑器,为了方便用户,它带有一个文件上传功能,但是这个功能却出过多次漏洞。 FCKEditor针对ASP/PHP/JSP等环境都有对应的版本,以PHP为例,其文件上传功能在:

Java文件上传类FileUploadUtil.java代码+注释

? 一个通用的Java文件上传类,支持上传图片,支持生成缩略图,设置最大上传文件字节数,不设置时默认10M,可接收来自表单的数据,当有多个文件域时, 只上传有文件的,忽略其他不是文件域的所有表单信息,支持用户对上传文件大小, 字节进行设置,本上传类可过滤掉以下文件类型:".exe", ".com", ".cgi", ".asp", ".php", ".jsp"等,你可自已添加过滤的文件后缀,上传文件时如果没有上传目录,则自动创建它。。。 ? package com.gootrip.util; import java.io.File; import java.util.*; import https://www.360docs.net/doc/0918665539.html,mons.fileupload.*; import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; import java.io.IOException; import https://www.360docs.net/doc/0918665539.html,mons.fileupload.servlet.ServletFileUpload; import https://www.360docs.net/doc/0918665539.html,mons.fileupload.disk.DiskFileItemFactory; import java.util.regex.Matcher; /** * TODO 要更改此生成的类型注释的模板,请转至 * 窗口-首选项- Java -代码样式-代码模板 */ public class FileUploadUtil {

//当上传文件超过限制时设定的临时文件位置,注意是绝对路径 private String tempPath = null; //文件上传目标目录,注意是绝对路径 private String dstPath = null; //新文件名称,不设置时默认为原文件名 private String newFileName = null; //获取的上传请求 private HttpServletRequest fileuploadReq = null; //设置最多只允许在内存中存储的数据,单位:字节,这个参数不要设置太大 private int sizeThreshold = 4096; //设置允许用户上传文件大小,单位:字节 //共10M private long sizeMax = 10485760; //图片文件序号 private int picSeqNo = 1; private boolean isSmallPic = false; public FileUploadUtil(){ } public FileUploadUtil(String tempPath, String destinationPath){ this.tempPath = tempPath; this.dstPath = destinationPath; }

文件上传原理,联系适用进度条

using System; using System.Collections.Generic; using https://www.360docs.net/doc/0918665539.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace文件的上传原理_练习使用进度条_ { public partial class Form1 : Form { string path;//选择文件的路径 string fName;//要上传的文件的名字 public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { progressBar1.Visible = false; label2.Visible = false; } private void btnLiulan_Click(object sender, EventArgs e) { openFileDialog1.ShowDialog(); fName = openFileDialog1.SafeFileName.ToString();

textBox1.Text = fName; path = openFileDialog1.FileName.ToString(); path = path.Remove(path.Length - fName.Length); } private void btnStartDownload_Click(object sender, EventArgs e) { int length = 0; int speed; DirectoryInfo di = new DirectoryInfo(path); FileInfo[] fi = di.GetFiles(); foreach (FileInfo fi1 in fi) { if (fName == fi1.ToString()) { length = (int)(fi1.Length); break; } } speed = length / 1024; progressBar1.Maximum = (length / 1024)*100; progressBar1.Value = 0; progressBar1.Step = speed; label2.Visible = true; progressBar1.Visible = true; for (int i = 0; i < (length / 1024) * 100; i += speed) { progressBar1.Value += speed; //label2.Text = "速度:" + speed + "KB/s"; System.Threading.Thread.Sleep(100); } } } }

php+html5实现无刷新上传、大文件分片上传、断点续传的方法

php+html5实现无刷新上传、大文件分片上传、断点续传的方法理清思路: 引入了两个概念:块(block)和片(chunk)。每个块由一到多个片组成,而一个资源则由一到多个块组成。 块是服务端的永久数据存储单位,片则只在分片上传过程中作为临时存储的单位。服务端会以约一个月为单位周期性的清除上传后未被合并为块的数据片。实现过程: 将文件分割,分片上传,然后合并。 前端代码: Document

java实现文件上传、下载

tomcat上传文件下载文件 首先介绍一下我们需要的环境:我用的是myeclipse8.5的java开发环境,tomcat是用的apache-tomcat-6.0.26这个版本。首先先需要准备一下使用到的 jar包 这些jar包是struts2的jar包。这些jar包是都是用于上传文件的。 注意:这里的jar包版本必须是对应的,如不是可能会tomcat下报错。所以大家最好注意一下啊。最好是用这套jar包。我将会在csdn上将项目jar包发上去。 Jar下载地址(0 分):https://www.360docs.net/doc/0918665539.html,/detail/woaixinxin123/4193113 源代码下载(10分): https://www.360docs.net/doc/0918665539.html,/detail/woaixinxin123/4193134 开始搭建我们的项目。创建web项目名字为File。 第一步:搭建struts2框架。 1、到jar包。

2、编辑web.xml struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepa reAndExecuteFilter struts2 /* index.jsp

WebUploader,Java大文件分片上传

Web大文件分片上传 Web环境中大文件上传不能再用form表单一次上传了,这样效率太低; 我在不断尝试SpringMVC环境下分片接受文件,最终失败;原因目测是SpringMVC、Struts 框架是不支持HTML5方式上传的(这类框架只能支持Form表单方式的文件上传,或者FLash) 那我们可以使用Servlet和SpringMVC结合集成方式实现大文件分片上传; 一、来看看我们的web.xml的配置 很明显两个servlet,上面一个配置的是SpringMVC的入口,下面servlet是视频上传; 他们俩的url-pattern不能冲突;

二、先来看看WebUploader的前端代码 以下是代码: <%@page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

//此处的引入文件位置路径为相对于该PHP文件的位置此为demo.php 3.

java读取上传excel文件和txt文件中的数据

Java 读取上传文件里的数据,记事本文件和excel文件 本文,文本文件里的数据,每列以 Tab 分隔。 其它分隔符情况下,只需修改对分隔符的判断即可 本文是将文本文件或excel文件里的数据读到List 里。 List , List, ........可以改为返回其它类型的数据集 UpLoadExcel 类里需要操作excel的 jar包 import org.apache.poi.* ; 网上可以搜索下载,简单快捷 ---------------------------------------------------------------------------- - - - public class upLoadAction extends DispatchAction { public ActionForward doAdd(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { TestForm myForm = (TestForm) form; FormFile f = myForm.getUpfisle(); //get上传文件 String fileName = f.getFileName(); // 截取文件名的后三位字符 String fileType = fileName.substring(fileName.length()-3,fileName.length()); System.out.println("导入的文件名:"+fileName+"\t 文件后缀名:"+fileType); List list = new ArrayList(); if("xls".equals(fileType)){ // 上传文件是excel时文件文件后缀名为xls list = new UpLoadExcel().getExcelData(f.getInputStream()); }else if("txt".equals(fileType)){ list = new UploadText().UploadText(f.getInputStream()); } // 操作读取出来的数据,例如: if (list.size() > 0) { String[] str = null; for(int i = 0; i < list.size(); i++) { str = list.get(i); st = "insert into student (sName,sAge,sAddress,sTelephone) values(" ; st = "'" + st + str[0] + "'"; st = ",'" + st + str[1] + "'"; st = ",'" + st + str[4] + "'"; st = ",'" + st + str[6] + "'"; st = st + ")"; ...... System.out.println(st);

Java文件上传下载

主要方法介绍 上传 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始化 su.initialize(pageContext); // 限制每个上传文件的最大长度。 su.setMaxFileSize(10000); // 限制总上传数据的长度。 su.setTotalMaxFileSize(20000); // 设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。 su.setAllowedFilesList("doc,txt"); // 设定禁止上传的文件(通过扩展名限制),禁止上传带有exe,bat, //jsp,htm,html扩展名的文件和没有扩展名的文件。 su.setDeniedFilesList("exe,bat,jsp,htm,html,,"); // 上传文件 su.upload(); // 将上传文件全部保存到指定目录 int count = su.save("/upload"); 下载 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 初始化 su.initialize(pageContext); // 设定contentDisposition为null以禁止浏览器自动打开文件, //保证点击链接后是下载文件。若不设定,则下载的文件扩展名为 //doc时,浏览器将自动用word打开它。扩展名为pdf时, //浏览器将用acrobat打开。 su.setContentDisposition(null); // 下载文件 su.downloadFile("/upload/test.doc"); ***************************************************************************************************** ***************** 应用实例: 用户只能上传图片格式的文件实例

电子投标文件制作及上传问题汇总

电子投标文件制作工具常见问题汇总 工具安装要求 操作系统:推荐win7旗舰版(完整版) 浏览器:推荐IE9 Office:2007及以上版本(2003、wps不可以,如有请卸载)。 另:安装office2003,同时安装2007兼容包方式也不可以。安装包获取 打开赤峰公共资源交易中心网站(),在网站“常用工具”栏 目下载。 注:CA驱动及投标文件制作工具均在此栏目下载 工具安装问题 1、安装工具之前请先关闭360安全卫士,360杀毒等杀毒软件, 否则可能会导致一些插件无法安装导致安装失败 2、安装过程中如遇弹出框提示“XXX文件正在使用”,点击“忽 略”按钮继续安装,待安装完成后重启电脑即可。 3、如安装过程中,进度条已到最后但就是卡住系统无响应,请 重装系统或更换电脑安装。 投标文件制作问题 1、投标工具安装完成后第一次打开会弹出检测页面,按照要

求进行每一项内容检测,检测完成后点击“启动招投标工具”按钮,正式打开新点投标文件制作工具(赤峰版)。 2、制作过程如代理发布答疑文件,请下载最新的答疑文件重 新导入制作(多次答疑使用最新版),之前使用招标文件制作的工程文件(etbp格式)、或已签章加密生成电子投标文件(CFTF、nCFTF格式)均无效(无法上传至系统中)。 3、“授权委托书”中要求附的“法定代表人身份证明”文件, 请放入“投标所需其她材料”文档里一并上传。 4、“施工组织设计”模块操作方法:首先将预先编制完成的的 完整的施工组织设计文档导入,然后将左侧节点与右边施工组织设计正文内容一一对应。 对应方法:右击左侧节点,点击“对应文档位置”。完成后后左侧节点颜色会由红色变为黑色。 如对应错误需重新调整,将右侧正文滚动至需要的地方,仍旧右击左侧节点,点击“对应文档位置”即可。 注意: 1、请各投标单位在节点对应时务必认真对待,千万不要 对应出错。 2、左侧节点为代理设置的施工组织设计评分点,请勿擅 自进行添加,删除等操作,否则后果自负。 3、施工组织设计文档编制请严格按照招标文件要求,内 容方面问题软件公司不予解答,具体可咨询代理。

相关文档
最新文档