SpringMVC和jQuery的Ajax簡單檔案上傳下載示例
阿新 • • 發佈:2019-01-20
準備工作:
前端引入:1、jquery,我在這裡用的是:jquery-1.10.2.min.js
2、ajaxfileupload.js
這裡可能會報一些錯,所以在json判斷那裡修改為(網上也有):
Js程式碼
末尾那裡補充一段:
Js程式碼
後臺匯入spring的jar包,我這裡用的是:spring3.0.5
在spring.xml裡配置如下:
Xml程式碼
這裡就充分利用框架的便利性幫你都做好了,如果你不在xml裡配置這些,那麼在controller那裡,request.getInputStream()得到的這個流不全是檔案流,還包含了其他,需要你自己編碼去解析,當然,要解析的話還要知道http相關報文解析知識,所以這裡可以充分利用框架的便利性,有興趣的可以研究下
好了,準備工作做好了,看下前端的具體程式碼:
Html程式碼
js程式碼為:
Js程式碼
----------------------------------------------------------------------------------
注:如果你對ajax不熟悉,或者由於瀏覽器等原因,致使上述方式提交出現各種問題,那麼你可以用form表單形式提交,程式碼片段如下:
Html程式碼
前端引入:1、jquery,我在這裡用的是:jquery-1.10.2.min.js
2、ajaxfileupload.js
這裡可能會報一些錯,所以在json判斷那裡修改為(網上也有):
Js程式碼
![收藏程式碼](http://quarterlifeforjava.iteye.com/images/icon_star.png)
- if ( type == "json" ){
- data = r.responseText;
- var start = data.indexOf(">");
- if(start != -1) {
-
var end = data.indexOf("<", start + 1);
- if(end != -1) {
- data = data.substring(start + 1, end);
- }
- }
- eval( "data = " + data );
- }
末尾那裡補充一段:
Js程式碼
![收藏程式碼](http://quarterlifeforjava.iteye.com/images/icon_star.png)
- handleError: function( s, xhr, status, e ) {
- if ( s.error ) {
-
s.error.call( s.context || window, xhr, status, e );
- }
- if ( s.global ) {
- (s.context ? jQuery(s.context) : jQuery.event).trigger ( "ajaxError", [xhr, s, e] );
- }
- }
後臺匯入spring的jar包,我這裡用的是:spring3.0.5
在spring.xml裡配置如下:
Xml程式碼
![收藏程式碼](http://quarterlifeforjava.iteye.com/images/icon_star.png)
- <!-- SpringMVC上傳檔案時,需要配置MultipartResolver處理器 -->
-
<bean id="multipartResolver"
- <property name="defaultEncoding" value="UTF-8"/>
- <!-- 指定所上傳檔案的總大小不能超過200KB。注意maxUploadSize屬性的限制不是針對單個檔案,而是所有檔案的容量之和 -->
- <!-- 不在這裡限制了,後臺各自進行限制了
- <property name="maxUploadSize" value="2000000"/>
- -->
- </bean>
- <!-- SpringMVC在超出上傳檔案限制時,會丟擲org.springframework.web.multipart.MaxUploadSizeExceededException -->
- <!-- 該異常是SpringMVC在檢查上傳的檔案資訊時丟擲來的,而且此時還沒有進入到Controller方法中 -->
- <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
- <property name="exceptionMappings">
- <props>
- <!-- 遇到MaxUploadSizeExceededException異常時,跳轉到/page/html/errorGolbal.html頁面 -->
- <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/page/html/errorGolbal.html</prop>
- </props>
- </property>
- </bean>
這裡就充分利用框架的便利性幫你都做好了,如果你不在xml裡配置這些,那麼在controller那裡,request.getInputStream()得到的這個流不全是檔案流,還包含了其他,需要你自己編碼去解析,當然,要解析的話還要知道http相關報文解析知識,所以這裡可以充分利用框架的便利性,有興趣的可以研究下
好了,準備工作做好了,看下前端的具體程式碼:
Html程式碼
![收藏程式碼](http://quarterlifeforjava.iteye.com/images/icon_star.png)
- <div id="fileUpLoad" class="manage">
- 添附檔案
- <!-- 自定義 <input type="file"/> -->
- <input type="file" id="btnFile" name="btnFile" onchange="txtFoo.value=this.value;com.company.project.services.newCase.fileUpLoad()" hidden="hidden" />
- <input type="text" id="txtFoo" readonly="readonly" style="width: 300px" />
- <button onclick="btnFile.click()" style="height: 25px;">選擇檔案</button>
- </div>
js程式碼為:
Js程式碼
![收藏程式碼](http://quarterlifeforjava.iteye.com/images/icon_star.png)
- if (!window.com) {
- window.com = {};
- }
- if (!window.com.company) {
- window.com.company= {};
- }
- if (!window.com.company.project) {
- window.com.company.project= {};
- }
- if (!window.com.company.project.services) {
- window.com.company.project.services = {};
- }
- if (!window.com.company.project.services.newCase) {
- window.com.company.project.services.newCase = {};
- }
- //生成隨機guid數(參考網上)
- com.company.project.services.newCase.getGuidGenerator = function() {
- var S4 = function() {
- return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
- };
- return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
- };
- //上傳檔案
- com.company.project.services.newCase.fileUpLoad = function(){
- var fileName = $("#btnFile").val();//檔名
- fileName = fileName.split("\\");
- fileName = fileName[fileName.length-1];
- var guid = com.company.project.services.newCase.getGuidGenerator();//唯一標識guid
- var data = {guid:guid};
- jQuery.ajaxSettings.traditional = true;
- $.ajaxFileUpload({
- url : '/PROJECT/function.do?method=fileUpLoad',
- secureuri : false,//安全協議
- fileElementId:'btnFile',//id
- type : 'POST',
- dataType : 'json',
- data:data,
- async : false,
- error : function(data,status,e) {
- alert('Operate Failed!');
- },
- success : function(json) {
- if (json.resultFlag==false){
- alert(json.resultMessage);
- }else{
- alert('檔案上傳成功!');
- var next = $("#fileUpLoad").html();
- $("#fileUpLoad").html("<div id='"+guid+"'>"+"檔案:"+fileName+" <a href='#' onclick='com.company.project.services.newCase.filedelete("+"\""+guid+"\""+","+"\""+fileName+"\""+")'>刪除</a>"+"<br/></div>");
- $("#fileUpLoad").append(next);
- }
- }
- });
- };
- //檔案刪除
- com.company.project.services.newCase.filedelete = function(guid,fileName){
- jQuery.ajaxSettings.traditional = true;
- var data = {guid:guid,fileName:fileName};
- $.ajax({
- url : '/PROJECT/function.do?method=filedelete',
- type : 'POST',
- dataType : 'json',
- data:data,
- async : false,
- error : function() {
- alert('Operate Failed!');
- },
- success : function(json) {
- if (json.resultFlag==false){
- alert(json.resultMessage);
- }else{
- alert('刪除成功!');
- $("#"+guid).remove();
- }
- }
- });
- };
----------------------------------------------------------------------------------
注:如果你對ajax不熟悉,或者由於瀏覽器等原因,致使上述方式提交出現各種問題,那麼你可以用form表單形式提交,程式碼片段如下:
Html程式碼
![收藏程式碼](http://quarterlifeforjava.iteye.com/images/icon_star.png)
- <div id="fileUpLoad" class="manage">
- <form id="needHide" action="/工程/function.do?method=fileUpLoad" method="post" enctype="multipart/form-data" target = "hidden_frame">
- <!-- 自定義 <input type="file"/> -->
- <input type="file" id="btnFile" name="btnFile" onchange="txtFoo.value=this.value;com.company.project.services.newCase.fileUpLoad()" hidden="hidden"/>
- </form>
- 添附檔案
- <input type="text" id="txtFoo" readonly="readonly" style="width: 300px" />
- <button onclick="btnFile.click()" style="height: 25px;">選擇檔案</button>
-