spring mvc檔案上傳實現進度條
檔案上傳應該大部分人都接觸過,一般都是基於commons-fileupload元件來實現,SpringMVC的檔案上傳功能也是在commons-fileupload元件提供的功能上面做了一些包裝功能,使檔案上傳開發更容易方便。
看下上傳效果圖:
專案執行效果:
專案使用spring mvc+mybatis實現,資料庫採用mysql,具體參考README就可以釋出起來。
一、實現普通檔案上傳
我們知道,類DispatcherServlet是SpringMVC的入口,在其doDispatch方法裡面,我們可以看到它會先去檢查有沒配置multipartResolver
如果有的話會先執行它的resolveMultipart方法:
因此,我們在配置檔案中新增:
則可使用SpringMVC自帶的CommonsMultipartResolver實現多個檔案上傳的功能。
二、實現進度條
現在實現帶進度條的檔案上傳一般都是在客戶端用flash上傳元件計算,或者是通過客戶端外掛的方式。前者上傳元件有大小的限制,後者對於我們系統來說實現過於複雜,開發難度稍大。因此我們採用伺服器端計算檔案上傳進度,客戶端輪詢的方式。
Commons-fileupload元件自帶了檔案上傳進度的監聽器,類FileUploadBase提供了它的set方法。
ProgressListener是一個介面,我們需要自己實現它的update方法,引數pBytesRead表示已經上傳到伺服器的位元組數,pContentLength表示所有檔案的總大小,pItems表示第幾個檔案:
SpringMVC沒有實現監聽器,所以如果要監聽的話得自己擴充套件CommonsMultipartResolver類,在newFileUpload裡面加入程式碼設定自己實現的監聽器:
ServletFileUploadExt是對ServletFileUpload類進行的擴充套件,後面會提到。這樣在檔案上傳的過程中,監聽器將得到通知已上傳的位元組數:
自己實現的,在這個類中需要在每一次上傳請求中設定處理上傳進度的監聽器,並處理檔案上傳。
1 2 3 4 5 6 7 8 9 10 11 12 |
protected FileUpload newFileUpload(FileItemFactory fileItemFactory) {
ServletFileUpload upload = new ServletFileUpload(fileItemFactory);
upload.setSizeMax(- 1 );
if (request != null ) {
HttpSession session = request.getSession();
//注意:這裡的listener不能公用,即不能放到方法外面
FileUploadProgressListener progressListener =
new FileUploadProgressListener(session);
upload.setProgressListener(progressListener);
}
return upload;
}
|
在配置檔案spring-mvc-context.xml中配置使用自定義的Resolver。
?1 2 3 4 |
< bean id = "multipartResolver"
class = "com.sunshine.fusys.controllers.CustomMultipartResolver" >
< property name = "defaultEncoding" value = "UTF-8" />
< property name = "maxUploadSize" value = "1000000000000" />
</ bean >
|
最終在上傳時,會通過commons-fileupload的元件進行上傳時,會把上傳進度讀取到設定的session中,最後通過一個controller訪問這個設定的進度值,就可以獲取了。獲取進度的controller為ProgressController。客戶端採用非同步的方式獲取進度資訊進行展示,具體參考原始碼index-userFile.jsp。
三、取消檔案上傳
取消檔案上傳實現方式為上傳時儲存上傳輸入流的引用,取消時關閉流,讓輸入流產生IO異常或者陣列越界異常,同時捕獲這些異常,則可取消檔案上傳。
最後補一個配置,spring mvc的專案訪問時預設訪問某個指定頁面或者controller的配置如下:
?1 2 |
//轉向controller
< mvc:view-controller path = "/" view-name = "redirect:/indexMain/index" />
|
或者
?1 2 |
//轉向index.jsp
< mvc:view-controller path = "/" view-name = "/index" />
|
相關推薦
spring mvc檔案上傳實現進度條
檔案上傳應該大部分人都接觸過,一般都是基於commons-fileupload元件來實現,SpringMVC的檔案上傳功能也是在commons-fileupload元件提供的功能上面做了一些包裝功能,使檔案上傳開發更容易方便。 看下上傳效果圖:
jQuery監聽檔案上傳實現進度條效果
給XMLHttpRequest物件的upload屬性繫結onprogress方法監聽上傳過程 var xhr=new XMLHttpRequest(); xhr.upload.onprogress=function(e){} 因為jQuery預設使用的
基於AJAX的檔案上傳顯示進度條實現
基於Ajax的檔案上傳要實現的功能要求,要在使用者提交了上傳按鈕請求後,客戶端其頁面要顯示檔案上傳進度條。 其整個功能時序圖如圖所示。 簡單的說,要實現在客戶端顯示進度條,需要做的是:當客戶端提交上傳檔案請求後,伺服器在上傳檔案
使用jquery.form.js實現檔案上傳及進度條前端程式碼
1、背景 ajax的表單提交只能提交data資料到後臺,沒法實現file檔案的上傳還有展示進度功能,這裡用到form.js的外掛來實現,搭配css樣式簡單易上手,而且高大上,推薦使用。 2、靜態頁搭建 html程式碼如下 <div clas
spring MVC檔案上傳和實時進度提醒
@RequestMapping(value = "/getProgress.do", method = RequestMethod.POST, produces = { "application/json" }) @ResponseBody
Spring MVC 檔案上傳工具類
public class UploadFiles { /** * 檔案的名稱 */ private String name; /** * 檔案的新的名稱 */ private String uuidname; /**
SpringMVC之檔案上傳(進度條顯示)
親測可用 1、mvc-config.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
純H5 AJAX檔案上傳加進度條功能
上傳程式碼js部分 //包上傳 $('.up_apk').change(function () { var obj = $(this); var form_data = new FormData(); // 獲取檔案 var fi
檔案上傳 含進度條(fileupload控制元件)
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">之前的專案一直沒有涉及到達的檔案上傳,所以沒有用到進度條,這幾天不忙,所
spring mvc 檔案上傳並攜帶其他引數
這是主要使用到的jar 檔案是:spring mvc +apache common-fileuplad 第一步:web.xml 檔案。【重點是spring mvc的攔截器和相關監聽器】 <?xml version="1.0" encoding="UTF-8"?&g
Bootstrap file-input 外掛使用(大檔案上傳顯示進度條)
Bootstrap file-input 是一個檔案上傳的外掛 ,使用之後會使檔案上傳變得特別簡單. 方法: 1.新增css和js支援 fileinput.min.css和fileinput.min.js是必須的,其他根據情況新增 除了外掛需要的js
Springboot 檔案上傳(帶進度條)
1. 相關依賴 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="htt
servlet3.0之ajax檔案上傳和進度條
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <h
java struts2 多檔案上傳 加進度條
摘要 實現批量上傳,同時又進度顯示和上傳速度 1、struts.xml檔案配置 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN
Spring MVC檔案上傳出現錯誤:Required MultipartFile parameter 'file' is not present
1.配置檔案上傳的解析器 首先需要在spring mvc的配置檔案中(注意是spring mvc的配置檔案而不是spring的配置檔案:applicationContext.xml)配置: springmvc-config.xml <!-- 檔案上傳bean--> <
Java架構-Spring mvc+oss儲存+fileupload多檔案上傳實現SSO單點登入模板管理
之前給大家介紹了sso的相關知識點和整合方案,考慮到每個系統所屬行業的不同,這邊針對於不同行業做了一些統一的sso單點登入介面模板,使用fileupload多檔案上傳+OSS阿里雲端儲存方案。 1. 阿里雲oss儲存Utils Java程式碼 2. 阿里雲配
atitit.文件上傳帶進度條的實現原理and組件選型and最佳實踐總結O7
private tps cto 協議 post sch 頁面 system osc atitit.文件上傳帶進度條的實現原理and組件選型and最佳實踐總結O7 1. 實現原理 1 2. 大的文件上傳原理::使用applet 1 3. 新的bp 2 1. 性能提升
jquery 實現拖動文件上傳加進度條
進行 con pos rip file round 默認 dex toupper 通過對文件的拖動實現文件的上傳,主要用到的是HTML5的ondrop事件,上傳內容通道FormData傳輸: //進度條 <div class="parent-dlg" >
基於DiskFileItemFactory實現的檔案上傳和進度監聽
10月1假期圓滿結束,在家裡躺了5天,啥也沒幹,回來的時候家裡還給我拿了螃蟹什麼的,昨天就讓我吃了,哈哈哈。 這幾天一直想實現以下檔案的上傳和檔案上傳時顯示進度條,看了幾個部落格,照著自己敲了一下,將自己不明白的地方也查
Spring Cloud Feign的檔案上傳實現
在Spring Cloud封裝的Feign中並不直接支援傳檔案,但可以通過引入Feign的擴充套件包來實現,本來就來具體說說如何實現。服務提供方(接收檔案)服務提供方的實現比較簡單,就按Spring MVC的正常實現方式即可,比如:@EnableFeignClients @E