博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用最简单的例子实现jQuery图片即时上传
阅读量:6218 次
发布时间:2019-06-21

本文共 4236 字,大约阅读时间需要 14 分钟。

【http://www.cnblogs.com/Zjmainstay/archive/2012/08/09/jQuery_upload_image.html】

 

最近看了一些jQuery即时上传的插件,总算看懂了些门路。现将其最为核心的一部分抽取出来,以期用最简单的例子来说明jQuery图片即时上传的原理。

  首先本用例一共包含3个文件:

    1、上传面板HTML文件。

    2、上传处理PHP文件。

    3、jQuery库。

  第一、上传面板HTML文件(index.html)。

           其主要包含了jQuery库、即时上传所需js、表单和iframe框架。下面是其源码,其中已附详细注释。

1  2  3  4     jQuery Upload Image 5     
6
7
8 9 10 11 16 33
34
35
36
37
38 39

   第二、上传处理PHP文件(submit_form_process.php)。

    其主要包含了图片文件的简单上传,及返回图片标签<img>,其中存储刚上传的图片。下面是其源码。

1 
标签6 echo "";7 //End_php

   总结之原理透析:

    讲到jQuery即时上传,不知道其原理的人第一想法一般都是使用AJAX(补注:当时不知道有FormData对象),我也尝试过。但是,由于上传文件不同于一般数据的POST,它需要表单form的提交来完成。因此,jQuery上传插件也是将<input type="file">的数据转至一个新生的form当中将其提交,而表单的target指向新生的iframe,在iframe中做表单提交后的处理,完成后iframe会重新加载并包含处理结果,通过iframe的load事件便可捕捉并获取处理结果,回传至原表单所在的页面(feedback)中,实现jQuery即时上传的效果。而在表单提交的时候,为了实现选择文件后即时提交表单,则使用了input标签的change事件(index.html L19-21),只要选择了文件,input的值就会发生变化,此时就可以提交表单进行处理了。

软件包下载:

 

/***************************************   追加  ***************************************/

受@东方翔 评论提示,测试了一下$.ajax 的FormData对象,然后发现成功了(FF、Chrome测试成功),嘿嘿~下面是源码,控制文件为submit_form_process.php不变。

特别的:contentType: false,

            processData: false,

这两个参数是必须的。

缺少contentType: false,$_FILES值为空。

缺少processData: false,FF控制台报错:“NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative prototype object”,直接不能运行。

1  2  3  4     FormData 5     
6
7 8 9 10 14
15
16
点击添加图片17
18
19
20 46 47

 

/***************************************   追加2  ***************************************/

多图上传实现(独立于上面两个版本的文件):

     1、index.html文件

        功能:点击图片添加文件、添加多个文件、即时上传文件、显示上传文件反馈信息。

        包含技术:

              1)$.ajax

              2)$.ajax 发送FormData对象

              3)input multiple="multiple"上传多个文件

              4)img οnclick="getElementById('inputfile').click()" 点击图片实现添加文件操作

              5)input type="file" 样式:height:0;width:0;z-index: -1;隐藏添加文件按钮(Chrome下使用display:none会导致点击失效)    

         源码:

1  2  3  4     Easy Ajax FormData Upload Multiple Images 5     
6
7 8 9 10 19
20
21
22
23
24
25
点击添加图片26
27
28
29
30 65 66

 

    2、submit_form_process.php后台处理文件

        功能:对FormData中包含的$_FILES数组做处理并上传图片文件,回传反馈信息。

        包含技术:

             1)FormData提交至$_FILES后的结构形式

             2)iconv('utf-8','gb2312',$filename) 对文件名进行转码处理

             3)preg_match("/^\.(jpg|jpeg|gif|png){1}$/i", strrchr($gb_filename, '.')) 文件类型过滤

             4)move_uploaded_file()上传文件

             5)echo '<textarea><img....<img....</textarea>';回传反馈信息。

        源码:

 

1 
"; 7 exit(0); 8 } 9 10 $output = "";41 42 //End_php

 

软件包下载:

 

附:多图上传版加强,请参考《》

转载于:https://www.cnblogs.com/rxbook/p/6635944.html

你可能感兴趣的文章
postgresql存储过程
查看>>
vue.js的安装部署+cnpm install 安装过程卡住不动----亲测可用
查看>>
如何使用win7自带的备份还原以及创建系统镜像------傻瓜式教程
查看>>
类,接口,抽象类,结构
查看>>
Linux GSO逻辑分析
查看>>
ORACLE 创建表空间
查看>>
keepalived+双主架构
查看>>
robotframwork的WEB功能测试(二)—登录
查看>>
java_有秒计时的数字时钟
查看>>
最小生成树-Prim算法与Kruskal算法
查看>>
阅读笔记11
查看>>
Javascript中大括号“{}”的多义性
查看>>
Loadrunner Get&Post方法性能测试脚本解析
查看>>
Android manifest 获取源代码
查看>>
第三讲课后作业1
查看>>
Studio快捷键
查看>>
弹丸类以及魂类的构想
查看>>
Daily Srum 10.21
查看>>
11-13 js操作css样式
查看>>
html5 css练习 画廊 元素旋转
查看>>