php+iframe实现隐藏无刷新上传文件


Posted in PHP onFebruary 10, 2012

首先ajax不能上传文件,这误导了我有段时间,今晚睡不着就照着说明做了个无刷新上传文件

其实原理很简单

<form enctype="multipart/form-data" method="POST" target="upload" action="http://localhost/class.upload.php" > 
<input type="file" name="uploadfile" /> 
<input type="submit" /> 
</form> 
<iframe name="upload" style="display:none"></iframe>

和一般的<form>标签相比多了一个target属性罢了,用于指定标签页在哪里打开以及提交数据。

如果没有设置该属性,就会像平常一样在本页重定向打开action中的url。

而如果设置为iframe的name值,即"upload"的话,就会在该iframe内打开,因为CSS设置为隐藏,因而不会有任何动静。若将display:none去掉,还会看到服务器的返回信息。

另外贴一下自己组织的类。

class upload 
{ 
public $_file; public function __construct( $name =null) 
{ 
if(is_null($name) || !isset($_FILES[$name])) 
$name = key($_FILES); 
if(!isset($_FILES[$name])) 
throw new Exception("并没有文件上传"); 
$this->_file = $_FILES[$name]; 
if(!is_uploaded_file($this->_file['tmp_name'])) 
throw new Exception("异常情况"); 
if($this->_file['error'] !== 0) 
throw new Exception("错误代码:".$this->_file['error']); 
} 
public function moveTo( $new_dir) 
{ 
$real_dir = $this->checkDir($new_dir); 
return move_uploaded_file($this->_file['tmp_name'], $real_dir.'/'.$this->_file['name']); 
} 
private function checkDir($dir) 
{ 
$real_dir = realpath($dir); 
if($real_dir === false) 
throw new Exception("给定目录{$dir}不存在"); 
if(!is_writable($real_dir)) 
throw new Exception("给定目录{$dir}不可写"); 
return $real_dir; 
}}

调用示例:
$inputName = 'uploadfile'; 
// 即<input type=“file" name="uploadfile" /> 中的name值,不填也行 
$upload = new upload($inputName); 
$new_dir = "/www"; // 将文件移动到的路径 
$upload->moveTo($new_dir);
PHP 相关文章推荐
两种php调用Java对象的方法
Oct 09 PHP
通过对服务器端特性的配置加强php的安全
Oct 09 PHP
PHPCMS的使用小结
Sep 20 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 01 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 #PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 #PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 #PHP
PHP高级对象构建 工厂模式的使用
Feb 05 #PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 #PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 #PHP
php 搜索框提示(自动完成)实例代码
Feb 05 #PHP
You might like
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
javascript常用对话框小集
2013/09/13 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
javascript实现在线客服效果
2015/07/15 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
JavaScript从0开始构思表情插件
2016/07/26 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
Python脚本获取操作系统版本信息
2016/12/17 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
.dcm格式文件软件读取及python处理详解
2020/01/16 Python
Python如何批量生成和调用变量
2020/11/21 Python
python的dict判断key是否存在的方法
2020/12/09 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
公司搬迁通知
2015/04/20 职场文书
农业项目合作意向书
2015/05/08 职场文书
学校财务管理制度
2015/08/04 职场文书
医院消毒隔离制度
2015/08/05 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL