iframe实现页面无刷新上传文件(PHP)----备忘

之前做一个文件上传的,由于那段时间写ajax比较多,所以就想利用Ajax来实现,后来发现,Ajax没法实现文件上传,

后来百度之,这里做个备忘。

提示:利用form表单的target属性和iframe

一、上传文件的一个php方法。
该方法接受一个$file参数,该参数为从客户端获取的$_FILES变量,返回重新命名后的文件名,如果上传失败,则返回空字符串。
php代码

    function uploadFile($file) { 
        // 上传路径     $destinationPath = "./upload/"; 
        if (!file_exists($destinationPath)){ 
            mkdir($destinationPath , 0777);     } 
        //重命名
        $fileName = date('YmdHis') . '_' . iconv('utf-8' , 'gb2312' , basename($file['name'])); 
        if (move_uploaded_file($file['tmp_name'], $destinationPath . $fileName)) {         return iconv('gb2312' , 'utf-8' , $fileName); 
        }     return ''; 
      } 

二、客户端HTML代码
这里正是技巧所在,添加另一个iframe来实现。表单标签form定义了一个属性target,该属性解释如下:
[pre]target属性:
_blank   ----------   新开窗口
_self   -----------   自身
_top   ------------   主框架
_parent   ---------   父框架
自定义名字     -----   出现于框架结构,将会在该名称的框架内打开链接

本例中采用iframe名字,所以表单在提交时会在iframe内打开链接(即无刷新,确切的说应该是
感觉无刷新)
在表单提交时,调用startUpload方法,当然这是JS定义的。
[/pre][pre]此外我们还定义一个span来显示提示信息。代码如下:
[/pre]xhtml代码

    <form id="upForm" action="upload.php" method="post" enctype="multipart/form-data" target="upload_target" οnsubmit="startUpload()"> 导入文件:<input type="file" name="myfile" id="myfile" />
    <input type="submit" name="submitBtn" value="导入" /> <iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;">iframe>
    form> <span id="info">span> 

三、JS部分
这部分比较简单,只是显示提示信息
javascript代码
    function startUpload() { 
        var spanObj = document.getElementById("info");     spanObj.innerHTML = " 开始上传"; 
    } 
    function stopUpload(responseText){     var spanObj = document.getElementById("info"); 
        spanObj.innerHTML = " 上传成功;     spanObj.innerHTML = responseText; 
      } 
接下来就要看服务器端得处理了。

四、服务器段处理部分
php代码

    $file = $_FILES['myfile'];   $fileName = uploadFile($file); 
      $result = readFromFile("./upload/" . $fileName); 

此外在后面还应该加上一句JS代码用来调用stopUpload方法。
javascript代码

      window.top.window.stopUpload(""); 

最后在补上php中的readFromFile方法,就大功告成了。
php代码

    function readFromFile($target_path) { 
        // 读取文件内容     $file = fopen($target_path,'r') or die("unable to open file"); 
        $fileContent = '';     while(!feof($file)) 
        {         $str = fgets($file); 
            $fileContent .= $str;     } 
        fclose($file);     return $fileContent; 
      } 

转载于:https://www.cnblogs.com/spemoon/archive/2011/01/07/1930221.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

native react 常用指令_React Native入门基础篇(一)

学习一次&#xff0c;随处书写。(以下文字来自各大网上资料整理而来&#xff0c;侵删&#xff01;)概述使用React为Android和iOS创建本机应用React Native将本机开发的最佳部分与React(用于构建用户界面的一流JavaScript库)结合在一起。 少用或多用。您现在可以在现有的Android…

C语言交换两个数(不创建临时变量)

方法一.加减法 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a 10;int b 20;//加减法a a b;b a - b;//b原来的aa a - b;//a原来的b//缺点&#xff1a;若a、b为较大的数会溢出printf("%d %d", a, b);return 0; }二.异或法 #de…

zoj 3511 Cake Robbery(线段树)

题目链接&#xff1a;zoj 3511 Cake Robbery 题目大意&#xff1a;就是有一个N边形的蛋糕。切M刀&#xff0c;从中挑选一块边数最多的。保证没有两条边重叠。 解题思路&#xff1a;有多少个顶点即为有多少条边&#xff0c;所以直接依照切刀切掉点的个数排序&#xff0c;然后用线…

在Android命令行启动程序的方法

在Android中&#xff0c;除了从界面上启动程序之外&#xff0c;还可以从命令行启动程序&#xff0c;使用的是命令行工具am.启动的方法为 # am start -n 包(package)名/包名.活动(activity)名称 启动的方法可以从每个应用的AndroidManifest.xml的文件中得到&#xff0c;以计算器…

IIS 6.0支持.SHTML

许多网站为了做seo优化&#xff0c;都把页面做成静态页面&#xff0c;方便搜索引擎的抓取&#xff0c;许多静态页面都是做成shtl页面的&#xff0c;这样做的好处是shtml页面可以包含html和htm文件&#xff01; 下面讲解下iis配置方法&#xff0c;让iis支持shtml页面方法如下&am…

python每隔半个小时执行一次_一篇文章教你用Python抓取微博评论

【Part1——理论篇】试想一个问题&#xff0c;如果我们要抓取某个微博大V微博的评论数据&#xff0c;应该怎么实现呢&#xff1f;最简单的做法就是找到微博评论数据接口&#xff0c;然后通过改变参数来获取最新数据并保存。首先从微博api寻找抓取评论的接口&#xff0c;如下图所…

eclipse导入class文件

右键src文件夹-》build path-》config build path-》library-》add class folder-》create new folder&#xff0c;此时在工程中会出现Referenced Librarier,在其中包含了你的新文件夹&#xff0c;同时在其下面出现了你的新文件夹&#xff0c;这时右键你的新文件夹-》import-》…

统计一个数的补码中二进制中1的个数

方法一&#xff1a; #include<stdio.h>int count_one_bit(int n){int count 0;while (n){if (n % 2 1){count;}n n / 2;}return count; } int main() {int num 0;int count 0;scanf("%d", &num);countcount_one_bit(num);printf("%d\n", c…

Oracle 随机获取N条数据

Oracle 随机获取N条数据 当我们获取数据时,可能会有这样的需求,即每次从表中获取数据时,是随机获取一定的记录,而不是每次都获取一样的数据,这时我们可以采取Oracle内部一些函数,来达到这样的目的1) select * from (select * from tablename order by sys_guid()) where row…

优先级队列,代码参考范例

一个看起来比较规范的代码&#xff1a; 1、版本信息 2、预处理信息 3、库函数引用 4、泛型编程 5、宏定义 6、复制构造函数 7、内敛函数 8、变量命名规范 9、代码的时间空间效率 10、错误恢复能力 11、规范的注释和缩进 代码范例&#xff1a; /*******************************…

r数据框计算字符出现次数_R语言系列第二期:①R变量、脚本、作图等模块介绍...

在上一篇文章里&#xff0c;给大家介绍了R语言的下载&#xff0c;界面操作&#xff0c;6个处理对象等等。在这些内容的基础上&#xff0c;我们在这个部分为大家介绍一些实用知识&#xff0c;包括描述工作区结构、图形设备以及它们的参数等问题&#xff0c;还有初级编程和数据输…

$.AjaxFileUpload is not a function

2019独角兽企业重金招聘Python工程师标准>>> ..is not a function错误的可能情况&#xff1a; 1、JS引入的路径不对。检查方法是看浏览器控制台是否将JS载入了进来。 2、JS引入顺序不对。JS要在你使用之前引入 3、Jquery没有第一个引入。 4、函数所在script标签&…

打印一个整数二进制表示中所有的奇数位和偶数位

#include<stdio.h>void my_print(int n){int i 0;printf(" 打印奇数位\n");for (i 30; i >0; i i - 2){printf("%d ", (n >> i)&1);}printf("\n");printf("打印偶数位\n");for (i 31; i >1; i i - 2){prin…

60个数据窗口技巧(转)

60个数据窗口技巧 1.如何让存储文件目录的列&#xff0c;显示图片? 答&#xff1a;选择对应的column的display as picture属性为true 2、如何复制grid类型的所选择的行的数据到系统剪切板&#xff1f;答&#xff1a;string ls_selectedls_selecteddw_1.Object.DataWindow.Sel…

代理对象我所理解的设计模式(C++实现)——代理模式(Proxy Pattern)

文章结束给大家来个程序员笑话&#xff1a;[M] 概述 作为C工程师&#xff0c;免不了要管理内存&#xff0c;内存管理也是C中的难点&#xff0c;而智能指针采用引用计数的方法很方便的帮我们管理了内存的应用&#xff0c;极大方便了我们的任务效率。而智能指针的这类用法其实就是…

suse 内核编译安装_升级SUSE Linux内核的完整步骤!

安装完SLED 10后发现仍然有“热启动网络不通”的问题&#xff0c;原因是内核版本较低&#xff0c;于是升级到2.6.17版内核&#xff0c;成功解决此问题。为了造福广大菜鸟&#xff0c;分享一下我的经验&#xff0c;欢迎高手批评补充。1。将下载的新内核(比如linux-2.6.17.tar.bz…

C语言逆序字符串(递归实现)

算法思想 以字符串“abcdef”为例 1.将a保存到temp中 2.将f放到a的位置 3.f处填写‘\0’ 4.计算bcde的长度 5.如果bcde的长度大于1&#xff0c;则逆序 6.将a放到f的位置 #include <stdio.h> #include<string.h> int my_strlen(char* str) {char* start str;char*…

android 自定义控件

自定义一般分三种情况 1. 自定义布局 2. 自定义控件 3.直接继承View 下面来着eoe例子&#xff0c;实现自定义控件 1. 自定义属性 res/values/attrs.xml 自定义属性 <?xml version"1.0" encoding"utf-8"?> <resources><declare-styleable …

某项目要调用现有的100多个DLL 一 开始

某个项目需要使用很多内部其他Team的DLL 和第三方的DLL (大概百来个吧......这是什么鬼啊...可怕的历史,又不能改 这些dll都上生产环境了) 如果直接用dll引用之后调用 会有很多很多的问题 1.程序的质量会下降到 这百来个dll中质量最差的一个 (万一某些人在代码里面写什么lock(…

Hibernate3 jar包的作用[转]

from:http://nopainnogain.iteye.com/blog/761630 &#xff08;1&#xff09;hibernate3.jar: Hibernate的核心库&#xff0c;没有什么可说的&#xff0c;必须使用的jar包 &#xff08;2&#xff09;cglib-asm.jar: CGLIB库&#xff0c;Hibernate用它来实现PO字节码的动态生成&…