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 生成静态页面的办法与实现代码详细版
Feb 15 PHP
php数组去重的函数代码
Feb 03 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
详解php中反射的应用
Mar 15 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
php从数据库中读取特定的行(实例)
Jun 02 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 PHP
Laravel框架使用Redis的方法详解
May 30 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
Apr 03 PHP
php更新cookie内容的详细方法
Sep 30 PHP
解决laravel5.4下的group by报错的问题
Oct 16 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
php项目打包方法
2008/02/18 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
8个必备的PHP功能开发
2015/10/02 PHP
yii框架搜索分页modle写法
2016/12/19 PHP
js确定对象类型方法
2012/03/30 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
Express的路由详解
2015/12/10 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
老生常谈js数据类型
2017/08/03 Javascript
js数字滑动时钟的简单实现(示例讲解)
2017/08/14 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
vue-cli项目代理proxyTable配置exclude的方法
2018/09/20 Javascript
详解JavaScript的变量
2019/04/04 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
vue 使用鼠标滚动加载数据的例子
2019/10/31 Javascript
[55:54]FNATIC vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python使用pymysql小技巧
2017/06/04 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
2021/02/26 Python
Python的collections模块真的很好用
2021/03/01 Python
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
大专应届生个人简历的自我评价
2013/10/15 职场文书
社团活动策划书范文
2014/01/09 职场文书
学校安全工作制度
2014/01/19 职场文书
商场总经理岗位职责
2014/02/03 职场文书
个人委托书如何写
2014/09/25 职场文书
员工保密协议书
2014/09/27 职场文书
储备店长岗位职责
2015/04/14 职场文书
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
Python进程池与进程锁之语法学习
2022/04/11 Python