springmvc+jquery+ajaxfileupload.js实现带有文本域的文件上传
来源:互联网 发布:淘宝助手上传成功错误 编辑:程序博客网 时间:2024/06/07 02:08
最近项目中做的有部分是文件上传,一个表单中有文本域text,复选框checkbox等,还有一个文件域file,这样的文件上传,直接使用form提交即可,但是在该项目中,要求,文件上传要用ajax,因为这样可以得到后台的返回值,前台页面会有提示,达到一个好的用户体验效果,但是这样,就不能直接使用form提交表单,而要使用ajax提交,而ajax是无法传文件的,jquery的post请求依旧无法达到要求,因此,就在网上找找一些ajax插件,在网上找了不少的博客,但是貌似没有一些范例,有点不好下手。看了不少的博客,还是自己摸索着来实现,最终选择了ajaxfileupload.js来做插件,来实现这个功能,下面直接上代码。
前台页面代码:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>JQuery ajaxfileupload文件上传</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery/jquery-1.9.1.js"></script><script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery/ajaxfileupload.js"></script><script type="text/javascript"> function ajaxFileUpload() { $.ajaxFileUpload({ url : 'springmvc/upload2', secureuri : false, fileElementId : 'fileToUpload', dataType : 'json', data : { name : $('#name').val() }, success : function(data, status) { var message = data['message']; var code = data['code']; if (code==200) { alert("操作成功!"); }else{ alert("处理异常!"); } }, error : function(data, status, e) { alert("上传发生异常"); } }) return false; }</script></head><body> <h2>JQuery ajaxfileupload文件上传</h2> <img id="loading" src="images/loading.gif" style="display: none;"> 用户信息: <br /> 姓名: <input id="name" name="name" type="text"> <br /> 附件: <input id="fileToUpload" name="file1" type="file" class="input"> <br /> <br> <br> <input type="button" onclick="return ajaxFileUpload();" value="上传"> <br /> 上传进度: <label id="fileUploadProcess"></label></body></html>
spring controller中的代码:
package com.tgb.web.controller.annotation.upload;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.Writer;import java.util.Date;import java.util.Iterator;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.IOUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartFile;import org.springframework.web.multipart.commons.CommonsMultipartResolver;@Controller@RequestMapping("/springmvc")public class UploadController { @RequestMapping("/upload") public String addUser(@RequestParam("file") CommonsMultipartFile[] files, HttpServletRequest request) { System.out.println("=============================="); for (int i = 0; i < files.length; i++) { System.out.println("fileName---------->" + files[i].getOriginalFilename()); if (!files[i].isEmpty()) { int pre = (int) System.currentTimeMillis(); try { // 拿到输出流,同时重命名上传的文件 FileOutputStream os = new FileOutputStream("H:/" + new Date().getTime() + files[i].getOriginalFilename()); // 拿到上传文件的输入流 FileInputStream in = (FileInputStream) files[i] .getInputStream(); // 以写字节的方式写文件 int b = 0; while ((b = in.read()) != -1) { os.write(b); } os.flush(); os.close(); in.close(); int finaltime = (int) System.currentTimeMillis(); System.out.println(finaltime - pre); } catch (Exception e) { e.printStackTrace(); System.out.println("上传出错"); } } } return "/success"; } @RequestMapping("/upload2") public void upload2(HttpServletRequest request, HttpServletResponse response) throws IllegalStateException, IOException { System.out.println("upload2 start work....."); String name = request.getParameter("name"); System.out.println(name); // 创建一个通用的多部分解析器 CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver( request.getSession().getServletContext()); // 判断 request 是否有文件上传,即多部分请求 if (multipartResolver.isMultipart(request)) { // 转换成多部分request MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; // 取得request中的所有文件名 Iterator<String> iter = multiRequest.getFileNames(); while (iter.hasNext()) { // 记录上传过程起始时的时间,用来计算上传时间 int pre = (int) System.currentTimeMillis(); // 取得上传文件 MultipartFile file = multiRequest.getFile(iter.next()); if (file != null) { // 取得当前上传文件的文件名称 String myFileName = file.getOriginalFilename(); // 如果名称不为“”,说明该文件存在,否则说明该文件不存在 if (myFileName.trim() != "") { System.out.println(myFileName); // 重命名上传后的文件名 String fileName = "demoUpload" + file.getOriginalFilename(); // 定义上传路径 String path = "E:/" + fileName; File localFile = new File(path); file.transferTo(localFile); } } // 记录上传该文件后的时间 int finaltime = (int) System.currentTimeMillis(); System.out.println(finaltime - pre); } } responseMessage(response); } private void responseMessage(HttpServletResponse response) { response.setCharacterEncoding("utf-8"); response.setContentType("text/html; charset=" + "utf-8"); Writer writer = null; try { writer = response.getWriter(); writer.write("{\"code\":" + 200 + ",\"message\":\"" + "上传成功" + "\"}"); writer.flush(); writer.close(); } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(writer); } }}
spring mvc相关配置,在spring的配置文件中配置如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="10485760000"></property> <property name="maxInMemorySize" value="40960"></property> </bean>
这样支持文件上传,上传文件依赖jar包包括:
commons-fileupload-1.2.2.jar
commons-io-2.4.jar
详细代码在:http://download.csdn.net/detail/wolf_soul/8997787,免费下载。
0 0
- springmvc+jquery+ajaxfileupload.js实现带有文本域的文件上传
- ajaxfileupload.js+SpringMVC实现文件上传
- SpringMVC+ajaxFileUpload.js实现文件上传
- ajaxfileupload.js+springMVC实现无刷新文件上传
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC结合ajaxfileupload.js实现异步上传文件
- SpringMVC结合ajaxfileupload.js实现文件无刷新上传
- SpringMVC与ajaxfileupload.js实现多个文件同时上传
- SpringMVC结合ajaxfileupload.js实现ajax无刷新文件上传
- springmvc excel导入方法(jquery的ajaxfileupload上传excel文件)
- Jquery ajaxfileupload.js结合.ashx文件实现无刷新上传
- jQuery ajax + ajaxfileupload.js插件 实现无刷新文件上传
- [Leetcode]Palindrome Number
- leetcode: Maximum Depth of Binary Tree
- Eclipse工程出现红叉
- cookie 和 Session
- SecureCRT 绝佳配色方案, 保护你的眼睛
- springmvc+jquery+ajaxfileupload.js实现带有文本域的文件上传
- 构造器的讲解和使用(8.12)
- HDOJ-1875-畅通工程再续
- Java/JSP使用JNI技术调用本地动态链接库
- Raspberry PI上安装OpenWRT
- TableView省市区数组字典 属性传值
- Lua笔记11-迭代器和闭包
- MySQL字符集设置及字符转换(latin1转utf8)
- Java笔试面试题006