jQuery插件ajaxFileUpload异步上传文件


Posted in Javascript onOctober 19, 2016

ajaxFileUpload.js 很多同名的,因为做出来一个很容易。
我用的是这个:https://github.com/carlcarl/AjaxFileUpload
下载地址在这里:http://xiazai.3water.com/201610/yuanma/ajaxfileupload(3water.com).rar

AjaxFileUpload.js并不是一个很出名的插件,只是别人写好的放出来供大家用,原理都是创建隐藏的表单和iframe然后用JS去提交,获得返回值。

当初做了个异步上传的功能,选择它因为它的配置方式比较像jQuery的AJAX,我很喜欢。

评论里面说到的不行。那是因为我们用的不是同一个js。我上github搜AjaxFileUpload出来很多类似js。

ajaxFileUpload是一个异步上传文件的jQuery插件

传一个不知道什么版本的上来,以后不用到处找了。

语法:$.ajaxFileUpload([options])

options参数说明:

1、url

  上传处理程序地址。

2,fileElementId

   需要上传的文件域的ID,即<input type="file">的ID。
3,secureuri

  是否启用安全提交,默认为false。
4,dataType

  服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
5,success

提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
6,error

  提交失败自动执行的处理函数。
7,data

  自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。
8, type

   当要提交自定义参数时,这个参数要设置成post

错误提示:

1、SyntaxError: missing ; before statement错误

如果出现这个错误就需要检查url路径是否可以访问
2、SyntaxError: syntax error错误

如果出现这个错误就需要检查处理提交操作的服务器后台处理程序是否存在语法错误
3、SyntaxError: invalid property id错误

如果出现这个错误就需要检查文本域属性ID是否存在
4、SyntaxError: missing } in XML expression错误

如果出现这个错误就需要检查文件name是否一致或不存在
5、其它自定义错误

大家可使用变量$error直接打印的方法检查各参数是否正确,比起上面这些无效的错误提示还是方便很多。

使用方法:

第一步:先引入jQuery与ajaxFileUpload插件。注意先后顺序,这个不用说了,所有的插件都是这样。

<script src="jquery-1.7.1.js" type="text/javascript"></script>
 <script src="ajaxfileupload.js" type="text/javascript"></script>

第二步:HTML代码:

<body>
 <p><input type="file" id="file1" name="file" /></p>
 <input type="button" value="上传" />
 <p><img id="img1" alt="上传成功啦" src="" /></p>
</body>

第三步:JS代码

<script src="jquery-1.7.1.js" type="text/javascript"></script>
 <script src="ajaxfileupload.js" type="text/javascript"></script>
 <script type="text/javascript">
 $(function () {
 $(":button").click(function () {
 ajaxFileUpload();
 })
 })
 function ajaxFileUpload() {
 $.ajaxFileUpload
 (
 {
 url: '/upload.aspx', //用于文件上传的服务器端请求地址
 secureuri: false, //是否需要安全协议,一般设置为false
 fileElementId: 'file1', //文件上传域的ID
 dataType: 'json', //返回值类型 一般设置为json
 success: function (data, status) //服务器成功响应处理函数
 {
 $("#img1").attr("src", data.imgurl);
 if (typeof (data.error) != 'undefined') {
 if (data.error != '') {
 alert(data.error);
 } else {
 alert(data.msg);
 }
 }
 },
 error: function (data, status, e)//服务器响应失败处理函数
 {
 alert(e);
 }
 }
 )
 return false;
 }
 </script>

第二个例子

使用ajaxFileUpload上传文件时,有时需要带参数提交,网上有很多资料说使用data,但其实要使用data带参数是需要修改的,否则后台是获取不到的.

分析原因:

ajaxFileUpload为了实现无刷新异步提交文件,构建 iframe 然后创建form表单 再将要上传的文件写上去再提交.但是原代码 却没有处理data.所以这块内容需要我们自己加上去.
下面红色部分为修改ajaxFileUpload.js的三处地方:

备注:好像csdn代码中加颜色加粗  有问题这三处修改的地方我直接贴出来,位置看下面的代码,

createUploadForm: function(id, fileElementId,data);

if (data) {
        for (var i in data) {
            $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
        }
    }

var form = jQuery.createUploadForm(id, s.fileElementId,s.data);

ajaxFileUpload为了实现无刷新异步提交文件,构建 iframe 然后创建form表单 再将要上传的文件写上去再提交.但是原代码 却没有处理data.所以这块内容需要我们自己加上去.
下面红色部分为修改ajaxFileUpload.js的三处地方:
备注:好像csdn代码中加颜色加粗  有问题这三处修改的地方我直接贴出来,位置看下面的代码,

createUploadForm: function(id, fileElementId,data);

if (data) { 
 for (var i in data) { 
 $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
 } 
 }

var form = jQuery.createUploadForm(id, s.fileElementId,s.data);

如何使用它呢?

$.ajaxFileUpload({
url: 'http://localhost:8080/HNUST/crawler/ordinary2', 
type: 'post',
data : {
url : url,
keyword : keyword,
rule : rule,
data : data,
sign:sign
},
secureuri: false, //一般设置为false
fileElementId: 'file', // 上传文件的id、name属性名
dataType: 'JSON', //返回值类型,一般设置为json、application/json 这里要用大写 不然会取不到返回的数据
success: function(data, status){ 
alert(data);
},
error: function(data, status, e){ 
alert(e);
}
});

html:
<input type="file" id="file" name="file">
java:java后台 获取参数还是正常获取:

String url=request.getParameter("url");
String keyword=request.getParameter("keyword");

获取文件并分行读取(非图片):

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; 
MultipartFile multipartFile = multipartRequest.getFile("file"); //这个file要与fileElementId一致

try {
InputStream inputStream=multipartFile.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String tempString = null;

// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
fileList.add(tempString); 
}
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

使用过程中有两点需要注意的地方:
其一,dataType必须要大写;
其二,在data的值要写成json的格式,否则后台无法接受参数

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript使用ActiveXObject访问Access和SQL Server数据库
Apr 02 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
Apr 07 Javascript
详解AngularJS中的依赖注入机制
Jun 17 Javascript
自定义刻度jQuery进度条及插件
Sep 02 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
不间断循环滚动效果的实例代码(必看篇)
Oct 08 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
Apr 20 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
Dec 06 Javascript
傻瓜式vuex语法糖kiss-vuex整理
Dec 21 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
Apr 17 Javascript
Angular和百度地图的结合实例代码
Oct 19 #Javascript
Bootstrap Table使用方法解析
Oct 19 #Javascript
JavaScript 中 avalon绑定属性总结
Oct 19 #Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
Oct 19 #Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 #Javascript
JavaScript重定向URL参数的两种方法小结
Oct 19 #Javascript
Angular2  NgModule 模块详解
Oct 19 #Javascript
You might like
一个用于MySQL的PHP XML类
2006/10/09 PHP
PHP写的求多项式导数的函数代码
2012/07/04 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
javascript 函数调用规则
2009/08/26 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
js实现前端分页页码管理
2017/01/06 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python文件特定行插入和替换实例详解
2017/07/12 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
python3 re返回形式总结
2020/11/20 Python
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
GANT葡萄牙官方商店:拥有美国运动服传统的生活方式品牌
2018/10/18 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
房地产销售员的自我评价分享
2013/12/04 职场文书
高中课程设置方案
2014/05/28 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
财务整改报告范文
2014/11/05 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
总经理致辞
2015/07/29 职场文书
2016党校学习心得体会
2016/01/07 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python