用php上传比较大的文件时,往往需要很长的等待时间,而且受网络和软件等的影响,经常会出现超时及上传失败的现象。如何在上传文件时实时的得到文件上传进度,以及如何避开php和其他因素的限制上传任意大小的文件呢?
php同asp等其他语言对上传文件的处理方式不同,asp中可以用Request.BinaryRead流式的读取客户端提交的数据。php是把文件存放在临时文件夹中,在文件上传完成后才能够获取其信息以及对其进行操作。如果在上传过程中我们能够得到其临时文件的文件名,我们就可以通过判断临时文件的大小来来得到上传进度,不过好像没有办法得到。所以我们只能通过其他方式,就是利用php的socket扩展建立一个简单的服务器,把数据post到这个服务器上,然后再用我们自己的机制来处理。
先说说流程,首先用php的socket函数库建立一个临时的http服务器,在某一端口监听,然后把ip地址和端口号通知客户端,客户端把上传表单提交到http://srvIpAddress:port(临时服务器), 临时服务器接受客户端请求,并读取post数据,分析并获取客户端上传的文件信息,把文件保存在服务器上,然后关闭临时服务器,释放资源,上传完成。 有点绕,不过思路还是简单的。
稍后我会发布一个类库,暂定名为:UGiA Visual PHP Uploader, 这样大家就可以在程序中很方便的调用了。效果如下:
UPU V0.2功能列表
- 理论上可以上传无限大的文件
- 实时显示上传状态、进度
- 支持多文件上传以及与表单混合上传
- 方便的用户调用接口
- 兼容不同浏览器
- …
调用方法:
1.下载upub0.2.rar, 将里面的upu目录解压到网站某一目录下。将upu/temp/, upu/files的目录权限改为755
2.打开upu/misc/upu.js, 修改var basePath = "/upload/upu/"; 为upu相对于网站根目录的路径
3.在包含上传表单的页面中加入<scrīpt type="text/javascrīpt" src="upu/misc/upu.js"></scrīpt>,这里的upu/misc/upu.js为upu.js的路径,然后在<form>标签中加入onsubmit="return upuInit(this)"
4.在你文件上传后处理的页面中使用$_POST来获取表单数据
注意:
1. UPU需要php4.3.0及其以上版本,并打开socket扩展,因为上传过程中需要开临时端口,请注意一下服务器的防火墙设置。
2. upu/temp为上传临时文件存放目录, upu/files为文件存放目录,这两个目录可以在upu.class.php中指定。
3. 你的<form>中要有enctype="multipart/form-data"这个属性,action为文件上传成功后的处理页面,也就是说你的<form>完全按照正常的思路来写就可以了,唯一不同的是需要加入onsubmit="return upuInit(this)"
4. 上传成功后,可以使用$_POST来获取表单数据,如果是普通表单,直接$_POST[’表单名称’]即可获得其值,如果是一个文件,则返回这样一个数组
$_POST[’表单名字’] = Array (
[filename] => 文件名
[clientpath] => 客户端文件路径
[savepath] => 上传后文件保存路径及文件名
[filetype] => 文件类型
[filesize] => 文件大小
[extension] => 扩展名
)
http://www.corange.cn/archives/2008/11/2197.html
分享到:
相关推荐
6. 支持进度事件信息及百分比显示。 7. 支持简洁高效的JAVASCRIPT编程接口。 8. 支持过滤文件大小,文件总数量,以及文件类型。 9.支持目前市面上任何浏览器(IE系列,火狐,GOOGLE浏览器等),不存在任何兼容性...
在IT行业中,文件上传与下载是许多Web应用的基础功能,特别是在协作、分享和存储平台中。这个代码模块可能包含了实现这两个功能的关键组件。下面将详细解释文件上传与下载的基本概念,以及实现这些功能的一些关键...
一、软件介绍: ...6. 支持进度事件信息及百分比显示。 7. 支持简洁高效的JAVASCRIPT编程接口。 8. 支持过滤文件大小,文件总数量,以及文件类型。 9.支持目前市面上任何浏览器,不存在任何兼容性问题
- `getinfo.php`、`progress.php`、`upload.php`:这些可能是处理文件上传的不同阶段,如获取文件信息、处理上传进度和实际的文件上传操作。 - `test.php`:测试脚本,用于验证类的功能是否正常。 - `README`:通常...
- **UploadProgress**: 文件上传过程中定时触发,报告当前的上传进度。 - **FileUploaded**: 单个文件上传成功后触发。 - **Error**: 发生错误时触发。 - **QueueChanged**: 文件队列发生变化时触发。 - **...
- 引入数据库:记录文件上传进度,支持多用户并发上传。 - 错误处理:添加错误检测和恢复机制,如网络中断后的重试。 - 性能优化:考虑大文件的内存管理,避免一次性加载整个文件。 - 用户界面:提供友好的上传进度...
9. **安全性**:在实现文件下载功能时,必须注意安全问题,如防止恶意文件上传和下载,避免跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。 综上所述,"download-file-size:下载任意大小的文件"这个项目涉及了JavaScript...
4. **进度条显示**:实时显示文件上传进度,提供良好的反馈机制。 5. **错误处理**:可以设定文件大小、类型限制,超过限制时会给出错误提示。 6. **取消上传**:允许用户在上传过程中取消操作,释放服务器资源。 7....
器中2GB的文件上传和断点续传,支持Windows和Linux服务器平台,支持任意格式的文件上传,尤其适合大的视频网站应用。单台服务器支持1000并发上传进程,支持PC端和智能手机端主流的浏览器。 【主要特性】 1.服务器端...
6. 支持进度事件信息及百分比显示。 7. 支持简洁高效的JAVASCRIPT编程接口。 8. 支持过滤文件大小,文件总数量,以及文件类型。 9.支持目前市面上任何浏览器(IE系列,火狐,GOOGLE浏览器等),不存在任何兼容性...
·可以导出导入任意大小的数据库。FaisunSQL 采用分卷导出的方式,将数据库分为多个部份多次导出,因此理论上无论多大的数据库,它都可以胜任。 ·导出的文件本身可以在PHP环境下执行,因此不需要借助其他工具...
通过突破性的技术,我们可以上传任意大小的文件,突破的IE文件上传大小限制的瓶颈。 实用工具:火车时刻、飞机航班、邮编、电话区号及国际时间等,这些常用工具只需系统管理员设置相关链接后,所有在线用户均可随时...
标题中的"文件上传插件verupload.js"指出我们要讨论的是一个专门用于文件上传的JavaScript插件,名为verUpload。在Web开发中,文件上传功能是常见的需求,它允许用户从本地计算机选择并发送文件到服务器。verUpload....
- 文件上传失败检测 - 树目录同步优化 ###ver2.5 `2014/6/15` ---- ####update: - 增加创建副本功能 按住ctrl拖拽即可,可以到当前,也可以到文件夹。 - 多选拖拽优化:剪切到、移动到某个文件夹 - 创建副本...
例如,将任意格式的视频文件转码为H264编码的MP4文件: ffmpeg -i 输入文件路径 -c:v libx264 -preset slow -crf 20 输出文件路径.mp4 其中-i参数指定输入视频文件,-c:v参数指定视频编码器为libx264,-preset参数...
显示目录及文件列表、建立目录,批量复制、删除、移动目录,文件改名、目录改 名、查看或清空剪贴板、文件直接预览,并具有通过WEB直接下载所有类型文件的功能,可在线编辑TXT、HTM、HTML、XML、DHTML、ASP、PHP、...
* 选择性的传输功能(传输图片或仅传输php文件)。 <br>其它功能 * 错误报告向导。 * 返回恢复的文件进行传输来防止崩溃。 * 自动重新连接和重新开始传输。 * 传输所有不同尺寸的文件,没有2...