springMVC是实现前台带进度条文件上传

        项目框架采用spring+hibernate+springMVC如果上传文件不想使用flash那么你可以采用html5;截图前段模块是bootstarp框架;不废话直接来代码;spring-mvc配置文件;效果截图如下:

        详细实现如下:

1、mvc-config.xml


  
  
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context= "http://www.springframework.org/schema/context"
  5. xmlns:mvc= "http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation= "http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-3.2.xsd
  10. http://www.springframework.org/schema/mvc
  11. http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
  12. <!-- 注解扫描包 -->
  13. <context:component-scan base-package="com.yunfang.banks.controllers" />
  14. <!-- 开启注解 -->
  15. <mvc:annotation-driven />
  16. <!-- 不拦截静态资源 -->
  17. <mvc:default-servlet-handler />
  18. <mvc:interceptors>
  19. <mvc:interceptor>
  20. <mvc:mapping path="/js/" />
  21. <mvc:mapping path="/js/**" />
  22. <bean class="com.yunfang.banks.intreceptor.MyInterceptor"> </bean>
  23. </mvc:interceptor>
  24. </mvc:interceptors>
  25. <mvc:interceptors>
  26. <bean class="com.yunfang.banks.intreceptor.MyInterceptor"> </bean>
  27. </mvc:interceptors>
  28. <!-- 静态资源(js/image)的访问 -->
  29. <mvc:resources location="/js/" mapping="/js/**" />
  30. <!-- 定义视图解析器 -->
  31. <bean id="viewResolver"
  32. class= "org.springframework.web.servlet.view.InternalResourceViewResolver">
  33. <property name="prefix" value="/"> </property>
  34. <property name="suffix" value=""> </property>
  35. </bean>
  36. <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  37. <property name="messageConverters">
  38. <list>
  39. <!--下载的时候专用 -->
  40. <bean
  41. class= "org.springframework.http.converter.ByteArrayHttpMessageConverter" />
  42. <bean id="jsonHttpMessageConverter"
  43. class= "org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
  44. <property name="supportedMediaTypes">
  45. <list>
  46. <value>text/plain;charset=UTF-8 </value>
  47. </list>
  48. </property>
  49. </bean>
  50. </list>
  51. </property>
  52. </bean>
  53. <!-- 配置springMVC处理上传文件的信息,自定义上传,带进度条 -->
  54. <bean id="multipartResolver" class="com.yunfang.banks.listener.CustomMultipartResolver">
  55. <property name="defaultEncoding" value="utf-8" />
  56. <property name="maxUploadSize" value="10000000000" />
  57. </bean>
  58. <!--
  59. <bean id="multipartResolver"
  60. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  61. <property name="defaultEncoding" value="utf-8" />
  62. <property name="maxUploadSize" value="10485760000" />
  63. <property name="maxInMemorySize" value="40960" />
  64. </bean>
  65. -->
  66. </beans>


2、实体工具类:Progress.java


  
  
  1. package com.yunfang.banks.listener;
  2. public class Progress {
  3. private long pBytesRead;
  4. private long pContentLength;
  5. private long pItems;
  6. public long getpBytesRead() {
  7. return pBytesRead;
  8. }
  9. public void setpBytesRead(long pBytesRead) {
  10. this.pBytesRead = pBytesRead;
  11. }
  12. public long getpContentLength() {
  13. return pContentLength;
  14. }
  15. public void setpContentLength(long pContentLength) {
  16. this.pContentLength = pContentLength;
  17. }
  18. public long getpItems() {
  19. return pItems;
  20. }
  21. public void setpItems(long pItems) {
  22. this.pItems = pItems;
  23. }
  24. @Override
  25. public String toString() {
  26. return "Progress [pBytesRead=" + pBytesRead + ", pContentLength="
  27. + pContentLength + ", pItems=" + pItems + "]";
  28. }
  29. }


3、文件上传进度监听类:FileUploadProgressListener.java


  
  
  1. package com.yunfang.banks.listener;
  2. import javax.servlet.http.HttpSession;
  3. import org.apache.commons.fileupload.ProgressListener;
  4. import org.springframework.stereotype.Component;
  5. @Component
  6. public class FileUploadProgressListener implements ProgressListener {
  7. private HttpSession session;
  8. public void setSession(HttpSession session){
  9. this.session=session;
  10. Progress status = new Progress();//保存上传状态
  11. session.setAttribute("status", status);
  12. }
  13. public void update(long pBytesRead, long pContentLength, int pItems) {
  14. Progress status = (Progress) session.getAttribute("status");
  15. try {
  16. Thread.sleep(5);
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }
  20. status.setpBytesRead(pBytesRead);
  21. status.setpContentLength(pContentLength);
  22. status.setpItems(pItems);
  23. //System.out.println(">>>>>>>>>>>>>>>>>>>>"+status);
  24. }
  25. }


4、自定义扩展org.springframework.web.multipart.commons.CommonsMultipartResolver类,重写public MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException方法:CustomMultipartResolver.java


  
  
  1. package com.yunfang.banks.listener;
  2. import java.util.List;
  3. import javax.servlet.http.HttpServletRequest;
  4. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  5. import org.apache.commons.fileupload.FileItem;
  6. import org.apache.commons.fileupload.FileUpload;
  7. import org.apache.commons.fileupload.FileUploadBase;
  8. import org.apache.commons.fileupload.FileUploadException;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.multipart.MaxUploadSizeExceededException;
  11. import org.springframework.web.multipart.MultipartException;
  12. import org.springframework.web.multipart.commons.CommonsMultipartResolver;
  13. public class CustomMultipartResolver extends CommonsMultipartResolver {
  14. @Autowired
  15. private FileUploadProgressListener progressListener;
  16. public void setFileUploadProgressListener(
  17. FileUploadProgressListener progressListener) {
  18. this.progressListener = progressListener;
  19. }
  20. @Override
  21. @SuppressWarnings("unchecked")
  22. public MultipartParsingResult parseRequest(HttpServletRequest request)
  23. throws MultipartException {
  24. String encoding = determineEncoding(request);
  25. FileUpload fileUpload = prepareFileUpload(encoding);
  26. progressListener.setSession(request.getSession());
  27. fileUpload.setProgressListener(progressListener);
  28. try {
  29. List <FileItem> fileItems = ((ServletFileUpload) fileUpload).parseRequest(request);
  30. return parseFileItems(fileItems, encoding);
  31. }
  32. catch (FileUploadBase.SizeLimitExceededException ex) {
  33. throw new MaxUploadSizeExceededException(fileUpload.getSizeMax(), ex);
  34. }
  35. catch (FileUploadException ex) {
  36. throw new MultipartException("Could not parse multipart servlet request", ex);
  37. }
  38. }
  39. }


5、uploadController.java


  
  
  1. @RequestMapping("UserControllers/progress")
  2. public void uploadFile(HttpServletRequest request,HttpServletResponse response,
  3. @RequestParam("file") CommonsMultipartFile file) throws IOException {
  4. response.setContentType("text/html");
  5. response.setCharacterEncoding("GBK");
  6. PrintWriter out;
  7. boolean flag = false;
  8. if (file.getSize() > 0) {
  9. //文件上传的位置可以自定义
  10. flag = FileUploadUtil.upLoadFile(file, request);
  11. }
  12. out = response.getWriter();
  13. if (flag == true) {
  14. out.print("1");
  15. } else {
  16. out.print("2");
  17. }
  18. }


6、FileUploadUtil.java


  
  
  1. import java.io.File;
  2. import javax.servlet.http.HttpServletRequest;
  3. import org.springframework.web.multipart.MultipartFile;
  4. public class FileUploadUtil {
  5. public static Boolean uploadFile(HttpServletRequest request, MultipartFile file) {
  6. System.out.println( "开始");
  7. String path = request.getSession().getServletContext().getRealPath( "upload");
  8. String fileName = file.getOriginalFilename();
  9. System.out.println(path);
  10. File targetFile = new File(path, fileName);
  11. if (!targetFile.exists()) {
  12. targetFile.mkdirs();
  13. }
  14. // 保存
  15. try {
  16. file.transferTo(targetFile);
  17. return true;
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. return false;
  21. }
  22. }
  23. }

7、前台页面


  
  
  1. <%@ page language="java" import="java.util.*" pageEncoding="Utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme() + "://"
  5. + request.getServerName() + ":" + request.getServerPort()
  6. + path + "/";
  7. %>
  8. <!DOCTYPE html>
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12. <meta http-equiv="pragma" content="no-cache">
  13. <meta http-equiv="cache-control" content="no-cache">
  14. <meta http-equiv="expires" content="0">
  15. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  16. <meta http-equiv="description" content="This is my page">
  17. <!--
  18. <link rel="stylesheet" type="text/css" href="styles.css">
  19. -->
  20. <link href="css/bootstrap.min.css" rel="stylesheet">
  21. <style type="text/css">
  22. .file-box {
  23. position: relative;
  24. width: 340px
  25. }
  26. .txt {
  27. height: 22px;
  28. border: 1px solid #cdcdcd;
  29. width: 180px;
  30. vertical-align: middle;
  31. margin: 0;
  32. padding: 0
  33. }
  34. .btn {
  35. border: 1px solid #CDCDCD;
  36. height: 24px;
  37. width: 70px;
  38. vertical-align: middle;
  39. margin: 0;
  40. padding: 0
  41. }
  42. .file {
  43. position: absolute;
  44. top: 0;
  45. right: 80px;
  46. height: 24px;
  47. filter: alpha(opacity : 0);
  48. opacity: 0;
  49. width: 260px;
  50. vertical-align: middle;
  51. margin: 0;
  52. padding: 0
  53. }
  54. </style>
  55. <%--<script type="text/javascript">
  56. function myInterval()
  57. {
  58. $("#progress").html("");
  59. $.ajax({
  60. type: "POST",
  61. url: " <%=basePath%>UserControllers/getSessions",
  62. data : "1=1",
  63. dataType : "text",
  64. success : function(msg) {
  65. var data = msg;
  66. console.log(data);
  67. $("#pdiv").css("width", data + "%");
  68. $("#progress").html(data + "%");
  69. }
  70. });
  71. }
  72. function autTime() {
  73. setInterval("myInterval()", 200);//1000为1秒钟
  74. }
  75. </script>
  76. --%>
  77. <script type="text/javascript">
  78. function UpladFile() {
  79. var fileObj = document.getElementById( "file").files[ 0]; // js 获取文件对象
  80. var FileController = "UserControllers/progress"; // 接收上传文件的后台地址
  81. // FormData 对象---进行无刷新上传
  82. var form = new FormData();
  83. form.append( "author", "hooyes"); // 可以增加表单数据
  84. form.append( "file", fileObj); // 文件对象
  85. // XMLHttpRequest 对象
  86. var xhr = new XMLHttpRequest();
  87. xhr.open( "post", FileController, true);
  88. xhr.onload = function() {
  89. alert( "上传完成!");
  90. //$('#myModal').modal('hide');
  91. };
  92. //监听progress事件
  93. xhr.upload.addEventListener( "progress", progressFunction, false);
  94. xhr.send(form);
  95. }
  96. function progressFunction(evt) {
  97. var progressBar = document.getElementById( "progressBar");
  98. var percentageDiv = document.getElementById( "percentage");
  99. if (evt.lengthComputable) {
  100. progressBar.max = evt.total;
  101. progressBar.value = evt.loaded;
  102. percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100)
  103. + "%";
  104. }
  105. }
  106. </script>
  107. </head>
  108. <body style="width: 80%;height: 80%;margin: 0px auto;">
  109. <div class="row bootstrap-admin-no-edges-padding">
  110. <div class="col-md-12">
  111. <div class="panel panel-default">
  112. <div class="panel-heading">
  113. <div class="text-muted bootstrap-admin-box-title">文件管理 </div>
  114. </div>
  115. <div class="bootstrap-admin-panel-content">
  116. <button class="btn btn-primary btn-lg" data-toggle="modal"
  117. data-target= "#myModal">上传 </button>
  118. <input type="text" id="test">
  119. </div>
  120. </div>
  121. </div>
  122. </div>
  123. <!-- 模态框(Modal) -->
  124. <div class="modal fade" id="myModal" tabindex="-1" role="dialog"
  125. aria-labelledby= "myModalLabel" aria-hidden= "true">
  126. <div class="modal-dialog">
  127. <div class="modal-content">
  128. <div class="modal-header">
  129. <button type="button" class="close" data-dismiss="modal"
  130. aria-hidden= "true"</button>
  131. <h4 class="modal-title" id="myModalLabel">文件上传进度 </h4>
  132. </div>
  133. <div class="modal-body">
  134. <progress id="progressBar" value="0" max="100"
  135. style= "width: 100%;height: 20px; "> </progress>
  136. <span id="percentage" style="color:blue;"> </span> <br>
  137. <br>
  138. <div class="file-box">
  139. <input type='text' name='textfield' id='textfield' class='txt' />
  140. <input type='button' class='btn' value='浏览...' /> <input
  141. type= "file" name= "file" class= "file" id= "file" size= "28"
  142. onchange= "document.getElementById('textfield').value=this.value" />
  143. <input type="submit" name="submit" class="btn" value="上传"
  144. onclick= "UpladFile()" />
  145. </div>
  146. </div>
  147. <div class="modal-footer">
  148. <button type="button" class="btn btn-default" data-dismiss="modal">关闭
  149. </button>
  150. </div>
  151. </div>
  152. <!-- /.modal-content -->
  153. </div>
  154. <!-- /.modal -->
  155. </div>
  156. <script type="text/javascript"
  157. src= "http://code.jquery.com/jquery-2.0.3.min.js"> </script>
  158. <script src="js/bootstrap.min.js"> </script>
  159. </body>
  160. </html>



 

 


 

猜你喜欢

转载自blog.csdn.net/tongshuixu8025/article/details/85305965