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分页显示制作详细讲解
Oct 09 PHP
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
Jun 01 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
Jun 23 PHP
PHP实现链式操作的核心思想
Jun 23 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
反射调用private方法实践(php、java)
Dec 21 PHP
php操作路径的经典方法(必看篇)
Oct 04 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 PHP
laravel实现前后台路由分离的方法
Oct 13 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
颠覆常识!无色透明的咖啡诞生了(中日双语)
2021/03/03 咖啡文化
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
用JQUERY增删元素的代码
2012/02/14 Javascript
js获取本机的外网/广域网ip地址完整源码
2013/08/12 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
JQuery常见节点操作实例分析
2019/05/15 jQuery
vue实现中部导航栏布局功能
2019/07/30 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
Python的log日志功能及设置方法
2019/07/11 Python
Python实现随机生成任意数量车牌号
2020/01/21 Python
pycharm激活码快速激活及使用步骤
2020/03/12 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
某公司C#程序员面试题笔试题
2014/05/26 面试题
百度软件工程师职位
2013/02/14 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
初中班级口号
2014/06/09 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
北京故宫导游词
2015/01/31 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
Java8中Stream的一些神操作
2021/11/02 Java/Android