之前上传文件都是用表单form设置post请求和enctype类型:

<form id="upload_form"action="" method="post" enctype="multipart/form-data">

提交按钮是一个submit类型的input,提交给后台进行处理。现在记录一下使用Ajax上传文件的步骤。

1.如果需要上传的文件域还是在一个表单中,但是该表单没有使用submit提交。

那么推荐使用Ajax表单插件(jquery.form.js),这款插件直接就支持文件的上传。我们直接使用它的ajaxForm方法即可(不要忘了引入这个插件):

            $('#btn').click(function(){
$('#upload_form').ajaxForm({
beforeSubmit:function(){
var file=$("#file")[0].files[0];
if(file==null){
return false;
}
var filesize = file.size/1024/1024;
if(filesize > 10){
console.log('文件大小超过限制,最多10M');
return false;
}
},
uploadProgress: function(event, position, total, percentComplete) {//上传的过程
//position 已上传了多少
//total 总大小
//percentComplete已上传的百分数
},
success: function(data) {
},
error:function(err){//失败
}
}); });

btn就是一个普通的button,upload_form是这个表单的id,file是文件域的id。我在beforeSubmit回调函数里判断上传文件的大小,如果大于10M不允许上传,uploadProgress回调函数中可以得到当前上传的进度信息。

还有更多的回调函数可以参看该插件的文档:https://github.com/jquery-form/form

2.如果上传域不在一个表单中,我们可以使用formdata对象来处理:

        var formData = new FormData();
var name = $('#user_id').val();
formData.append("lunwen",$("#file")[0].files[0]);
formData.append("userId",name);
$.ajax({
url : '',
type : 'POST',
data : formData,
// 告诉jQuery不要去处理发送的数据
processData : false,
// 告诉jQuery不要去设置Content-Type请求头
contentType : false,
beforeSend:function(){
console.log("正在进行,请稍候");
},
success : function(responseStr) {console.log("error")}
            error : function(responseStr) { console.log("error"); } });

file依然是文件域,我们还可以将其他的数据都append进formData对象中

最后,我在这里贴一个后台Controller处理文件上传的代码:

    @ResponseBody
@RequestMapping(value="/updateInfo",method=RequestMethod.POST)
public boolean updateStudentInfo(User user,
@RequestParam(value="portrait",required=false)MultipartFile portrait,HttpServletRequest request) {
if(portrait!=null&&portrait.getSize()>0) {
if(portrait.getSize()>(10*1024*1024)) {
return false;
}
String filename=portrait.getOriginalFilename();
String dbPath=request.getServletContext().getContextPath()+"/portrait/"+user.getUserId();
String basePath=request.getServletContext().getRealPath("/portrait/"+user.getUserId());
new File(basePath).mkdir();
File portraitFile=new File(basePath,filename);
try {
portrait.transferTo(portraitFile);
user.setUserPortrait(dbPath+"/"+filename);
return userService.updateUserInfo(user);
} catch (Exception e) {
e.printStackTrace();
} }
return userService.updateUserInfo(user);
}

使用Ajax异步上传文件的更多相关文章

  1. ajax异步上传文件和表单同步上传文件 的区别

    1. 用表单上传文件(以照片为例)-同步上传 html部分代码:这里请求地址index.php <!DOCTYPE html> <html lang="en"&g ...

  2. 基于Flask开发网站 -- 前端Ajax异步上传文件到后台

    大家好,我是辰哥~ 辰哥最近利用空闲时间在写一个在线可视化平台,过程中也觉得一些技术还是比较有意思的,所以就以模块化的形式分享出来.如:从网页界面(前端)上传文件到服务器(后端). 放一下该模块的界面 ...

  3. Spring使用ajax异步上传文件

    单文件上传 <!-- 创建文件选择框 --> 文件上传 :<input type="file" id="file" name="fi ...

  4. ajax异步上传文件FormDate方式,html支持才可使用

    今天需要做一个头像的预览功能,所以我想到了异步上传文件. 总结几点: 异步上传难点: 文件二进制流如何获取 是否需要设置表单的头,就是content-Type那里.异步,所以无所谓了吧. 其他就差不多 ...

  5. 使用ajax异步上传文件或图片(配合php)

    //html代码 <form enctype="multipart/form-data" id="upForm"> <input type=& ...

  6. Ajax 异步上传文件

    需要引用js jquery.form 前端代码 <form action="/Save" id="mainForm" method="post& ...

  7. ajax异步上传文件之data参数----小哈学js

    下载ajaxFileUpload.js(下载网址:http://fileuploadajax.codeplex.com/downloads/get/20976) 修改ajaxFileUpload.js ...

  8. html5+php实现文件的断点续传ajax异步上传

    html5+php实现文件的断点续传ajax异步上传 准备知识:断点续传,既然有断,那就应该有文件分割的过程,一段一段的传.以前文件无法分割,但随着HTML5新特性的引入,类似普通字符串.数组的分割, ...

  9. (H5)FormData+AJAX+SpringMVC跨域异步上传文件

    最近都没时间整理资料了,一入职就要弄懂业务,整天被业务弄得血崩. 总结下今天弄了一个早上的跨域异步上传文件.主要用到技术有HTML5的FormData,AJAX,Spring MVC. 首先看下上传页 ...

随机推荐

  1. sql基础语法复习(二)-- 分组,连接的使用

    一.深入学习  group by group by ,分组,顾名思义,把数据按什么来分组,每一组都有什么特点. 1.我们先从最简单的开始: select count(*) from tb1 group ...

  2. libudev-dev : Depends: libudev0 (= 175-0ubuntu9) but 175-0ubuntu9.3 is to be installed 错误解决方案

    libudev-dev : Depends: libudev0 (= -0ubuntu9) but -0ubuntu9. is to be installed 错误解决方案 参考文章: 1. ubun ...

  3. RabbitMQ Study

    python pika install: pip install pika Chinese rabbitmq doc: http://rabbitmq.mr-ping.com/PIKA lib doc ...

  4. 【ACM非算法部分】综合篇

    从零开始系列,也为了更好的补缺补漏. ===================== 目录: scanf()函数 STL汇总 读入优化 =====================

  5. selenium-java,启动谷歌浏览器和火狐浏览器

    selenium3.4.0-java,启动谷歌浏览器和火狐浏览器-------------------------------------------------------------------- ...

  6. WebStorm的主题与设置

    1.  Webstorm主题风格选择 2.  Webstorm字体字号配置 3.  Webstorm快捷键的查找 4.  Webstorm插件的安装

  7. flask第十一篇——自定义url转换器

    首先和大家说一下flask的组成,flask其实是werkzeug(路由和http处理)+SQLAlchemy(数据库)+Jinja2(模板)组成的,今天我们要看到的东西就是`werkzeug`里面的 ...

  8. php中strstr、strchr、strrchr、substr、stristr

    一.strstr 和 strcchr的区别 strstr   显示第一次找到,要查找的字符串,以及后面的字符串. strrchr 显示最后一次找到,要查找的字符串,以及后面的字符串. 二.strstr ...

  9. Siddhi cep java 集成简单使用

    Siddhi 是一个开源的cep (Complex Event Processing)类库,有一个明显的例子是uber 的事件处理,具体可以google 几张参考cep 以及siddhi 图 java ...

  10. 使用 openresty 修改请求内容

    1. 目的    动态修改 html 页面内容   2. 使用方式    openresty  在 header_filter 阶段 以及body_filter 阶段进行数据修改   3. 源码  此 ...