日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

springmvc + ajaxfileupload 实现异步上传文件(图片)

發布時間:2023/12/15 c/c++ 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springmvc + ajaxfileupload 实现异步上传文件(图片) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在做一個項目需要實現異步上傳圖片,在網上找了很多資料后,采用了ajaxfileupload可以實現,以下是核心代碼:

jsp:

<!-- 上傳窗口 --> <div id="uploadPicWindow" class="easyui-window" title="上傳圖片" style="width:420px;height:220px;padding:20px;background:#fafafa;" data-options="iconCls:'icon-save',closable:true, collapsible:true,minimizable:true,maximizable:true"><form id="picForm" action="" method="post"><div style="margin-bottom:20px">圖片名稱:<input type="text" name="name" id="picName" class="easyui-textbox" style="width:80%" data-options="required:true,validType:'stringCheck'"/></div><br/><div style="margin-bottom:20px">選擇圖片:<input type="file" name="file" id="file" data-options="prompt:'Choose a file...'" style="width:80%"/></div><div id="picTip"></div><div id="formWindowfooterPic1" style="padding:5px;text-align:right;"> <a href="#" οnclick="submitPic();" class="easyui-linkbutton" data-options="iconCls:'icon-save'">提交</a></div></form></div>

js:

//新建或編輯 保存提交 function submitPic(){if(!$("#picForm").form('validate')){return false;}var projectId = $("#projectId").val();var name=$("#picName").val();var type="1";//展示圖片var f = $("#file").val();if(f==null||f==""){$("#picTip").html("<span style='color:Red'>錯誤提示:上傳文件不能為空,請重新選擇文件</span>");return false;}else{var extname = f.substring(f.lastIndexOf(".")+1,f.length);extname = extname.toLowerCase();//處理了大小寫if(extname!= "jpeg"&&extname!= "jpg"&&extname!= "gif"&&extname!= "png"){$("#picTip").html("<span style='color:Red'>錯誤提示:格式不正確,支持的圖片格式為:JPEG、GIF、PNG!</span>");return false;}}var file = document.getElementById("file").files; var size = file[0].size;if(size>2097152){$("#picTip").html("<span style='color:Red'>錯誤提示:所選擇的圖片太大,圖片大小最多支持2M!</span>"); return false;}ajaxFileUploadPic(projectId,name,type); }function ajaxFileUploadPic(projectId,name,type) {$.ajaxFileUpload({url : '${ctx}/projectPic/saveorupdate.jhtml?projectId='+projectId+'&name='+name+'&type='+type, //用于文件上傳的服務器端請求地址secureuri : false, //一般設置為falsefileElementId : 'file', //文件上傳空間的id屬性 <input type="file" id="file" name="file" />type : 'post',dataType : 'json', //返回值類型 一般設置為jsonsuccess : function(data, status) //服務器成功響應處理函數{$("#picList").datagrid('reload');$('#uploadPicWindow').window('close');// alert(data.msg);},error : function(data, status, e)//服務器響應失敗處理函數{$("#picList").datagrid('reload');$('#uploadPicWindow').window('close');// alert(data.msg);}});return false; }


ajaxfileupload.js jQuery.extend({createUploadIframe: function(id, uri){//create framevar frameId = 'jUploadFrame' + id;var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';if(window.ActiveXObject){if(typeof uri== 'boolean'){iframeHtml += ' src="' + 'javascript:false' + '"';}else if(typeof uri== 'string'){iframeHtml += ' src="' + uri + '"';} }iframeHtml += ' />';jQuery(iframeHtml).appendTo(document.body);return jQuery('#' + frameId).get(0); },createUploadForm: function(id, fileElementId, data){//create form var formId = 'jUploadForm' + id;var fileId = 'jUploadFile' + id;var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>'); if(data){for(var i in data){jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);} } var oldElement = jQuery('#' + fileElementId);var newElement = jQuery(oldElement).clone();jQuery(oldElement).attr('id', fileId);jQuery(oldElement).before(newElement);jQuery(oldElement).appendTo(form);//set attributesjQuery(form).css('position', 'absolute');jQuery(form).css('top', '-1200px');jQuery(form).css('left', '-1200px');jQuery(form).appendTo('body'); return form;},ajaxFileUpload: function(s) {// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout s = jQuery.extend({}, jQuery.ajaxSettings, s);var id = new Date().getTime() var form = jQuery.createUploadForm(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));var io = jQuery.createUploadIframe(id, s.secureuri);var frameId = 'jUploadFrame' + id;var formId = 'jUploadForm' + id; // Watch for a new set of requestsif ( s.global && ! jQuery.active++ ){jQuery.event.trigger( "ajaxStart" );} var requestDone = false;// Create the request objectvar xml = {} if ( s.global )jQuery.event.trigger("ajaxSend", [xml, s]);// Wait for a response to come backvar uploadCallback = function(isTimeout){ var io = document.getElementById(frameId);try { if(io.contentWindow){xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;}else if(io.contentDocument){xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;} }catch(e){jQuery.handleError(s, xml, null, e);}if ( xml || isTimeout == "timeout") { requestDone = true;var status;try {status = isTimeout != "timeout" ? "success" : "error";// Make sure that the request was successful or notmodifiedif ( status != "error" ){// process the data (runs the xml through httpData regardless of callback)var data = jQuery.uploadHttpData( xml, s.dataType ); // If a local callback was specified, fire it and pass it the dataif ( s.success )s.success( data, status );// Fire the global callbackif( s.global )jQuery.event.trigger( "ajaxSuccess", [xml, s] );} elsejQuery.handleError(s, xml, status);} catch(e) {status = "error";jQuery.handleError(s, xml, status, e);}// The request was completedif( s.global )jQuery.event.trigger( "ajaxComplete", [xml, s] );// Handle the global AJAX counterif ( s.global && ! --jQuery.active )jQuery.event.trigger( "ajaxStop" );// Process resultif ( s.complete )s.complete(xml, status);jQuery(io).unbind()setTimeout(function(){ try {jQuery(io).remove();jQuery(form).remove(); } catch(e) {jQuery.handleError(s, xml, null, e);} }, 100)xml = null}}// Timeout checkerif ( s.timeout > 0 ) {setTimeout(function(){// Check to see if the request is still happeningif( !requestDone ) uploadCallback( "timeout" );}, s.timeout);}try {var form = jQuery('#' + formId);jQuery(form).attr('action', s.url);jQuery(form).attr('method', 'POST');jQuery(form).attr('target', frameId);if(form.encoding){jQuery(form).attr('encoding', 'multipart/form-data'); }else{ jQuery(form).attr('enctype', 'multipart/form-data'); } jQuery(form).submit();} catch(e) { jQuery.handleError(s, xml, null, e);}jQuery('#' + frameId).load(uploadCallback );return {abort: function () {}}; },uploadHttpData: function( r, type ) {var data = !type;data = type == "xml" || data ? r.responseXML : r.responseText;// If the type is "script", eval it in global contextif ( type == "script" )jQuery.globalEval( data );// Get the JavaScript object, if JSON is used.if ( type == "json" )eval( "data = " + data );// evaluate scripts within htmlif ( type == "html" )jQuery("<div>").html(data).evalScripts();return data;},handleError: function( s, xhr, status, e ) {// If a local callback was specified, fire itif ( s.error ) {s.error.call( s.context || s, xhr, status, e );}// Fire the global callbackif ( s.global ) {(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );}}})


注:如果出現

jQuery.handleError is not a function? 原因是,經測試handlerError只在jquery-1.4.2之前的版本中存在,jquery-1.6 和1.7中都沒有這個函數了,因此在1.4.2中將這個函數復制到了ajaxFileUpload.js中,問題解決 handleError: function( s, xhr, status, e ) { // If a local callback was specified, fire itif ( s.error ) {s.error.call( s.context || s, xhr, status, e );}// Fire the global callbackif ( s.global ) {(s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );}}, 問題2:一直得到error ,無法執行指定的success方法。通過追蹤ajaxFileUpload的執行過程發現,在調用它自身的uploadHttpData函數時,當執行if(type=="json") eval("data = "+data); 會拋出異常,導致在處理異常的時候將status = "error" 因此一直執行error方法。 上網查詢,得知eval函數是用來執行一段js代碼,而并不是如我所想的反解json串 eval("data = "+data);的意思是 將data 賦值給 data參數 ,但是當我返回給頁面的是一個簡單的字符串,比如"OK" ,時,這樣寫就拋出異常。最后改為 eval("data = \" "+data+" \" ");即將返回的數據用雙引號引起來當作字符串,然后賦給 data 。終于成功了。。。



action:

@RequestMapping(value = "/saveorupdate.jhtml")@ResponseBodypublic synchronized String saveOrUpdate(HttpServletRequest request) throws IOException {DynamicParams params = new DynamicParams(request);String projectId = request.getParameter("projectId");String name = request.getParameter("name");String type = request.getParameter("type");params.put("projectId", projectId);params.put("name", name);params.put("type", type);MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;MultipartFile file = null;if("1".equals(type)){file = multipartRequest.getFile("file");// 獲取上傳文件名}else{file = multipartRequest.getFile("attachFile");// 獲取上傳文件名}ProjectPic projectPic = params.convertToEntity(ProjectPic.class); projectPicManager.save(projectPic, file.getInputStream());return successMsg();}
到此一切ok,開始上傳文件吧!

總結

以上是生活随笔為你收集整理的springmvc + ajaxfileupload 实现异步上传文件(图片)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 美女黄视频网站 | 精品96久久久久久中文字幕无 | 国产一区二区视频免费观看 | 日本在线视频一区二区三区 | 人人爱爱人人 | 国产精品精品国产 | a天堂在线资源 | 亚洲福利午夜 | 国产高清视频在线免费观看 | 国产偷人| 日韩一级免费毛片 | 天天操天天操天天射 | 高清日韩| 黑白配高清国语在线观看 | 欧美一区二区三区久久成人精品 | 黄色片视频免费观看 | 国产麻豆电影在线观看 | 亚洲蜜臀av乱码久久精品蜜桃 | 国产夫妻在线观看 | 久久国产精品系列 | 欧美youjizz| 激情一区 | 91av国产在线| 尤物av在线 | 99国产精品99久久久久久 | 91激情| 日韩亚洲欧美在线观看 | 亚洲色图另类图片 | 欧美黄色三级视频 | 亚洲精品3| 自拍偷拍欧美激情 | 亚洲色图国产 | 日本成人a| 黄色在线免费观看网站 | 久久久久成人精品 | 蜜桃91精品入口 | 国产特黄毛片 | 成人综合激情网 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 99热最新| 国产精品不卡一区二区三区 | 欧美有码在线观看 | 成人在线直播 | 91亚洲精华国产精华精华液 | 伊人www22综合色 | 欧美成人性生活片 | 久插网| 色呦呦一区二区三区 | 操操久久 | 一区二区三区视频免费在线观看 | 国产乱子伦精品无码码专区 | www,xxx日本| 亚洲国产精品系列 | 国产极品免费 | 欧美色88 | 午夜毛片视频 | 好吊视频在线观看 | 成人午夜精品福利 | 干一夜综合 | 日本在线观看一区二区 | 麻豆性视频 | 日韩电影中文字幕 | 欧美成人hd | 国产1区2区3区中文字幕 | 欧美日韩一区二区在线观看视频 | 日韩的一区二区 | 男人懂的网站 | 国产精品久久久久久免费免熟 | 免费亚洲一区 | 国产亚洲精品精品国产亚洲综合 | 国产一区二区三区免费观看 | 中文字幕在线色 | 国产高潮失禁喷水爽到抽搐 | 午夜久久精品 | 寂寞午夜影院 | 亚洲午夜无码久久 | 黑鬼大战白妞高潮喷白浆 | 91 色| 成人av一区二区在线观看 | 亚洲五月网 | 性高跟鞋xxxxhd国产电影 | 97免费视频观看 | 呦呦色 | 丰满的人妻hd高清日本 | 亚洲aaa| 超碰免费公开 | 成人夜视频 | 亚洲丝袜色图 | 91极品国产 | 欧美hdse| 国产精品午夜影院 | 影音先锋成人资源 | 色哟哟免费观看 | 少妇高潮大叫好爽喷水 | 日韩免费在线 | 亚洲一品道| av天堂一区二区三区 | 五月天狠狠操 | 日韩一级性生活片 |