转自:https://www.jianshu.com/p/f3987f0f471f

今天,我就这个问题来写一篇如何用 SpringMVC + AJAX 实现的多文件异步上传功能。基本的代码还是沿用上篇文章中所用到的项目,需要的朋友可以点击前面的链接查看。在这里只贴出关键代码。

首先我们要准备一个 JS 文件,即:ajaxfileupload.js,它需要用到 jQuery,所以我们还需要准备 jQuery 的库,两个文件在文末尾都有链接提供下载。

JSP 关键代码:

<li><div><input type="file" id="file1" name="imgFile" /><span class="uploadStatus"></span> </div> <div> <input type="file" id="file2" name="imgFile" /><span class="uploadStatus"></span> </div> <input type="button" onclick="ajaxUpload();" value="上传文件"/><br /> </li> 

两个 file input 标签的 name 是一致的“imgFile”,方便 SpringMVC 在 controller 层接收。每个 input 标签后面跟一对 span 标签,用于显示上传结果。
最后提供一个 button 按钮,点击事件 onclick 执行下面我们即将写的 JS 函数。

JS 关键代码:

<script src="js/jquery-2.1.0.js" type="text/javascript"></script> <script src="js/ajaxfileupload.js" type="text/javascript"></script> <script type="text/javascript"> // 多文件异步上传 function ajaxUpload(){ $("input[type=file]").each(function(){ var fileEleId = $(this).attr("id"); // 单个文件的异步上传 $.ajaxFileUpload({ url : 'user/ajaxUpload', // 用于文件上传的服务器端请求地址 fileElementId : fileEleId, // 对应文件上传标签的 id 属性 type : 'post', dataType : 'text', //返回值类型 success : function(data, status) { document.getElementById(fileEleId).nextSibling.innerHTML ="上传成功"; }, error : function(data, status, e) { document.getElementById(fileEleId).nextSibling.innerHTML ="上传失败"; } }); }); } </script> 

在循环中引用了 $.ajaxFileUpload 方法,这就是用来异步上传文件用的方法啦!看结构是不是与 jQuery 的 $.ajax 很像呢?需要注意的是 fileElementId 这个参数,用于指定即将上传文件的 input file 的标签 ID。最后在 success 函数中指定回传状态的显示结果就可以了。JSP 部分的代码到此结束,是不是很简单呢!

然后再来看对应 Controller 层代码,我们接着在上篇文章中用到的 UserController 类中写映射方法。
Java 代码:

    /*** 文件异步上传请求处理* @param request* @return 上传结果:success、failed*/@RequestMapping(value = "ajaxUpload", method = RequestMethod.POST) public @ResponseBody String ajaxUpload(HttpServletRequest request) { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; // 获取input file对应的 name 的文件 MultipartFile mFile = multipartRequest.getFile("imgFile"); String path = "D:\\testFile\\"; // 保存的文件位置 String fileName = mFile.getOriginalFilename(); // 上传的图片所保存在服务器上的位置 String outPath = path + fileName; try(OutputStream outputStream = new FileOutputStream(outPath); InputStream inputStream = mFile.getInputStream();){ byte[] buffer = new byte[4096]; int length = 0; while((length = inputStream.read(buffer)) != -1){ outputStream.write(buffer, 0, length); } } catch (IOException ioe){ logger.info("File Upload Exception...", ioe); return "failed"; } return "success"; } 

这样就OK了!
当然了,文件上传好了之后,我们还需要记录保存文件的 URL 路径到数据库中,有一个比较好的思路:将保存文件的URL返回给前端 JSP,然后在 JSP 上创建 hidden 隐藏表单域,将 URL 填写到 隐藏表单域中,提交表单时,直接传递 URL 给后端保存即可。

作者:uzip柚子皮
链接:https://www.jianshu.com/p/f3987f0f471f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

SpringMVC + AJAX 实现多文件异步上传相关推荐

  1. 源生ajax同步异步请求,源生JS怎样实现文件异步上传

    这次给大家带来源生JS怎样实现文件异步上传,源生JS实现文件异步上传的注意事项有哪些,下面就是实战案例,一起来看一下. 名称 文件 确定 function ajaxUploadFile() { var ...

  2. java文件异步上传_[Java教程]原生javascript实现文件异步上传

    [Java教程]原生javascript实现文件异步上传 0 2017-10-25 19:00:06 效果图: 代码:(demo33.jsp) demo33.jsp名称文件确定 本文网址:http:/ ...

  3. html5 上传图片模板,HTML5实现图片文件异步上传

    ,过现前个能文使近记接的端问对字用近记接 利用HTML5的新特点做文件异步上传非常简单方便,本文主要展示JS部分,html结构.下面的代码并未使用第三发库,如果有参照,请注意一些未展现出来的代码片段. ...

  4. 文件异步上传使用虚拟滚动el-table-virtual-scroll加载数据

    需求 最近在写一个批量导入数据的功能,需要通过上传文件异步导入调接口,将后台返回Excel文件里的数据不做分页用列表展示出来,再加上需要在列表嵌入输入框,所以加载大量数据渲染的时候要加载很久,需要用到 ...

  5. SpringMVC+SwfUpload进行多文件同时上传

    由于最近项目需要做一个多文件同时上传的功能,所以好好的看了一下各种上传工具,感觉uploadify和SwfUpload的功能都比较强大,并且使用起来也很方便.SWFUpload是一个flash和js相 ...

  6. j2ee html5,HTML5+J2EE实现文件异步上传

    P.S. HTML5经过了W3C的8年努力,终于正式推广了.这次升级最大的就是升级了XMLHTTPRequest,让它变成了XMLHTTPRequest Level II(这有啥奇怪的?).这个对象现 ...

  7. java文件异步上传_java 异步上传文件

    我们的java上传文件,需要form同步上传,并且需要设置enctype为multipart/form-data. 如果将form使用ajax异步提交的话,将会报错说enctype不是multipar ...

  8. webpy+uploadify实现文件异步上传

    Uploadify的官方文档见链接:点击打开链接 程序结构图 源代码 $def with () <!--file_upload.html--> <html lang="zh ...

  9. tp5文件异步上传入库+七牛云+预览图

    七牛云存储前提 composer require qiniu/php-sdk 然后七牛云官网 注册 注册 注册!!!! HTML 图片添加页面 <body> <form enctyp ...

  10. tp5多文件异步上传+七牛云+预览图

    html 前端页面 <form enctype="multipart/form-data" id="form"><input type=&qu ...

最新文章

  1. Mongodb最佳实践及使用问题
  2. python(40):利用utf-8编码判断中文英文字符
  3. 67.Java垃圾收集机制\对象引用\垃圾对象的判定\垃圾收集算法\标记—清除算法\标记—整理算法\分代收集\垃圾收集器\性能调优
  4. STL 之adjacent_find, merge,inplace_merge
  5. Java架构-面试怎么谈薪资——让自己的利益最大化
  6. 采用DCT进行图像压缩
  7. 接口测试--ssl证书问题
  8. SpringBoot 手写过滤器amp;加载第三方过滤器
  9. C++-十进制转二进制(matlab-dec2bin函数)
  10. Windows 8 页面应用测试(2)
  11. 2018 ideal 链接数据_利用 IDEA HTTP 请求文件访问 API 接口
  12. 创建.config后缀文件
  13. 矩阵的对数运算公式_对数(运算层面)
  14. 同一计算机打印机无法连接,共享打印机无法连接怎么办 共享打印机无法连接解决方法【图文教程】...
  15. cewl工具(URL字典生成器)
  16. 星星之火-6:无线通信必须知道的“信号”与傅里叶信号变换
  17. 【Excle数据透视表】如何移动数据透视表的位置
  18. pycharm:远程连接服务器调试代码(保姆级详细步骤)
  19. Omdia 表示,智能手机出货量下降 12.9%
  20. no applicable items eclipse

热门文章

  1. 在java中什么是所有类的父类_java中object是所有类的父类吗
  2. 关于安装TOMCAT解压版环境配置流程
  3. GitHub 又一 OCR 神器面世!让你快速告别「复制 + 粘贴」!
  4. 昨晚家里停网后,我动了邪念用Python破解了隔壁小姐姐的wifi密码
  5. mysql语句怎么替换_mysql怎么批量替换sql语句
  6. jQuery.ajax(解决跨域问题,jquery解决AJAX跨域问题
  7. docker 训练深度学习_基于 Alluxio 数据缓存的大规模深度学习训练性能优化
  8. sparksql 保存点_Spark SQL笔记整理(三):加载保存功能与Spark SQL函数
  9. c语言 com组件,com组件 C语言基础.ppt
  10. 安卓帧数监测软件_还在用游戏加加看帧数?驴哥教你怎么用微星小飞机的硬件监测功能...