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

  它的配置方式比较像jQuery的AJAX,使用比较方便

  语法:$.ajaxFileUpload([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

  使用步骤:

  第一步:导入JQuery和ajaxFileUpload的js文件

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

  第二步:HTML代码

    <div style="width:200px;">
<p><img id="img" src="" alt="头像"/></p>
<p><input type="file" id="file" name="file" onchange="imgPreview();"/></p>
<p>账户:<input type="text" id="username"/></p>
<p>密码:<input type="password" id="password"/></p>
<p><input type="button" value="注册" onclick="register();"/></p>
</div>

  第三步:JS代码

/*
用户—注册
*/
function register(){
//获取账户
var username = $('#username').val().trim();
if(username==null || username==''){
alert('账户为空!');
return false;
}
//获取密码
var password = $('#password').val().trim();
if(password==null || password==''){
alert('密码为空!');
return false;
}
//获取文件
var file = $('#file')[0].files[0];
if(!file){
alert('请上传头像文件!');
return false;
} $.ajaxFileUpload({
"url": 'register.do',
"secureuri": false,
"fileElementId": "file",
"data": {"username":username,"password":password},
"dataType": "text",
"success": function(result){
alert('注册成功!');
},
"error": function(result){
alert('注册失败!');
}
});
}

  第四步:后端java处理(spring)

     在使用MultipartHttpServletReuqest和MultipartFile类时,要对spring进行配置。

   具体见:http://www.cnblogs.com/gangbalei/p/6077791.html

    @RequestMapping(value="/register.do")
public void upload(HttpServletRequest request) throws IOException{
//获取ajaxFileUpload上传时data中传递的数据
String username = request.getParameter("username");
String password = request.getParameter("password"); // 判断request是否属于MultipartHttpServletRequest对象
// if(request instanceof MultipartHttpServletRequest){
// MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
// MultipartFile mfile = multipartRequest.getFile("file");
// } //将request强转成MultipartHttpServletRequest对象
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
//获取上传的文件
MultipartFile mfile = multipartRequest.getFile("file"); //设置文件存放的位置
File dir = new File("F:/upload");
//如果目录不存在,则创建一个该目录
if(!dir.exists()){
dir.mkdir();
}
//获取上传的文件名
String fileName = mfile.getOriginalFilename();
//获取请求的输入流
InputStream in = mfile.getInputStream();
//读取输入流的数据
byte[] buf = new byte[1048576];
int length = in.read(buf);
//文件存放的完成路径
String path = dir.getAbsolutePath()+"//"+fileName;
//新建输出流
FileOutputStream out = new FileOutputStream(path);
//将数据写入输出流中
out.write(buf, 0, length);
//关闭输入输出流
in.close();
out.close();
}

  注意:

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

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

    下面红色部分为修改ajaxFileUpload.js的三处地方:

    createUploadForm: function(id, fileElementId,data)
{
var formId = 'jUploadForm' + id;
var fileId = 'jUploadFile' + id;
var form = $('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
var oldElement = $('#' + fileElementId);
var newElement = $(oldElement).clone();
$(oldElement).attr('id', fileId);
$(oldElement).before(newElement);
$(oldElement).appendTo(form);
if (data) {
for (var i in data) {
$('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
}
}
//set attributes
$(form).css('position', 'absolute');
$(form).css('top', '-1200px');
$(form).css('left', '-1200px');
$(form).appendTo('body');
return form;
},

  在ajaxFileUpload: function(s)的内容中

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

ajaxFileUpload 异步上传数据的更多相关文章

  1. 【转】JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现a ...

  2. JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    太久没写博客了,真的是太忙了.善于总结,进步才会更快啊.不多说,直接进入主题. 前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错 ...

  3. jQuery插件之ajaxFileUpload异步上传

    介绍 AjaxFileUpload.js 是一个异步上传文件的jQuery插件,原理是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 下载地址: http://files.cnblogs. ...

  4. struts2 jquery ajaxFileUpload 异步上传文件

    网上搜集的,整理一下. 一.ajaxFileUpload 实现异步上传文件利用到了ajaxFileUpload.js这个文件,这是别人开发的一个jquery的插件,可以实现文件的上传并能够和strut ...

  5. jquery之ajaxfileupload异步上传插件

    点我下载工程代码由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/d ...

  6. 【文件上传】jquery之ajaxfileupload异步上传插件

    来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用J ...

  7. jquery ajaxFileUpload异步上传文件

    ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http:/ ...

  8. JQuery插件ajaxFileUpload 异步上传文件

    一.先对ajaxFileUpload插件的语法参数进行讲解 原理:ajaxfileupload是通过监听iframe的onload方法来实现, 当从服务端处理完成后,就触发iframe的onload事 ...

  9. asp.net mvc 使用uploadfiles 实现异步上传数据

    lesg.cn 文章发布在:  http://www.lesg.cn/netdaima/net/2017-990.html 在实际开发过程中, 为了提高用户的体验,在上传文件的时候通常会使用异步上传文 ...

随机推荐

  1. C语言atan2()函数:求y/x的反正切值

    头文件:#include <math.h> atan2() 函数用于求 y / x 的反正切值.其原型为:    double atan2(double y, double x); [参数 ...

  2. 期待许久的事情终于发生-微软收购Xamarin

    刚在VS推送的新闻中看到了醒目的标题:Microsoft to acquire Xamarin and empower more developers to build apps on any dev ...

  3. autoit使用WMIC获取硬件信息

    效果图: 直接上源码了 #cs ---------------------------------------------------------------------------- AutoIt ...

  4. iOS静态分析举例

    XCode-> Product -> Analyze 即可进行iOS静态代码分析.静态分析能发现的问题包括以下几种类型: 1.逻辑错误:访问空指针或未初始化的变量等: 2.内存管理错误:如 ...

  5. 【SSM 8】spring集成Mybatis通用Mapper

    上篇博客中介绍了关于Mybatis底层封装的思路问题,那么这篇博客,就介绍一下怎么引入通用的mapper插件. 备注:本项目通过maven管理 关键版本说明: spring:4.1.3.RELEASE ...

  6. 2016/9/25编写java实验报告时对synchronized(同步代码块)的一些感悟

    通过此次实验,明白了多线程的设置和启动.synchronized代码块的用法.线程的优先级使用方法.知道了那几类资源是线程共享的. 我现在理解的多线程是:实例化一个继承了Thread类或实现了Runn ...

  7. input file 图片上传

    使用第三方:jquery.ajaxfileupload.jsinput中的name根据后端来定 <form method="post" enctype="multi ...

  8. win10环境下ue4使用游戏手柄输入

    忙里偷闲,趁着源码编译需要好久的时间,把这篇博客补上,来说说怎么在win10环境中,ue4使用游戏手柄输入,也就是gamepad输入. 1.我用的手柄是rapoo v10 这款手柄,连接无线USB之后 ...

  9. 手持机(Android)开发应用总结

    对于首次接触android的我,刚接到android开发的命令时,自己完全不懂任何android技术,可是由于项目的开发时间周期很短,必须强迫自己即学即用,到了最后才发现,技术其实只是工具,重要的是一 ...

  10. VS2010添加资源文件

    VS2010中资源文件管理在 双击打开Resources.resx 选择左上角资源文件类型 然后复制资源文件 粘贴到空白区域 则会自动生成资源文件代码 在项目中使用该资源文件时,通过global::P ...