本篇文章主要介绍了SpringMVC结合ajaxfileupload实现文件无刷新上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
jQuery没有提供ajax的文件上传,我们可以通过ajaxfileupload实现ajax文件的上传。其实ajaxfileupload文件上传特别的简单。下面就演示一下在SpringMVC中实现ajax的文件上传。
1、后台接收代码
首先在spring的配置文件中添加文件上传配置
<!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"/> </bean>
再写文件接收的代码
package com.chinaunicom.jlmssp.controller; import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.commons.CommonsMultipartFile; import com.chinaunicom.jlmssp.model.DataResponse; import com.chinaunicom.jlmssp.model.JavaToJsMsg; import com.chinaunicom.jlmssp.model.Org_UserInfo; import com.chinaunicom.jlmssp.model.Repaly_Expert_Home_Page; import com.chinaunicom.jlmssp.services.Replay_ExpertManageService; /** * 项目复制管理子系统 * 专家云管理 * @author SunYue * @version 0.1 */ @Controller @RequestMapping("/admin/Replay_ExpertManageController.do") public class Replay_ExpertManageController { private static final HashMap<String, String> TypeMap = new HashMap<String, String>(); static { TypeMap.put("image", "gif,jpg,jpeg,png,bmp"); TypeMap.put("flash", "swf,flv"); TypeMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb"); TypeMap.put("file", "doc,docx,xls,xlsx,ppt,pptx,htm,html,txt,dwg,pdf"); } @Autowired Replay_ExpertManageService replayExpertManageService; /** * @author sunyue * @date 2017年2月28日 下午12:49:33 * @Description: 图片上传方法 * @return message: -1 没有文件上传 0 上传成功 1 上传失败 2 文件超过上传大小 3 文件格式错误 4 上传文件路径非法 5 上传目录没有写权限 * @return void 返回类型 */ @RequestMapping(params = "op=getImageUpload", method = RequestMethod.POST) public void getImageUpload(@RequestParam("upload") CommonsMultipartFile file,HttpServletRequest request, HttpServletResponse response) { if (!file.isEmpty()) { /*ServletContext servletContext = request.getSession() .getServletContext(); String uploadPath = servletContext.getRealPath("/") + "images\\replay-expert\\"; String upPathString = request.getServletPath(); */ //获取项目工作空间下工程路径的方法,将图片保存到工程路径下 String t=Thread.currentThread().getContextClassLoader().getResource("").getPath(); int num=t.indexOf(".metadata"); String uploadPath=t.substring(1,num).replace('/', '\\')+"jl_mssp_V3_0\\WebContent\\images\\replay-expert\\"; // 文件上传大小 long fileSize = 3 * 1024 * 1024; if (file.getSize() > fileSize) { backInfo(response, false, 2, ""); return; } String OriginalFilename = file.getOriginalFilename(); String fileSuffix = OriginalFilename.substring( OriginalFilename.lastIndexOf(".") + 1).toLowerCase(); if (!Arrays.asList(TypeMap.get("image").split(",")).contains( fileSuffix)) { backInfo(response, false, 3, ""); return; } if (!ServletFileUpload.isMultipartContent(request)) { backInfo(response, false, -1, ""); return; } // 检查上传文件的目录 File uploadDir = new File(uploadPath); if (!uploadDir.isDirectory()) { if (!uploadDir.mkdir()) { backInfo(response, false, 4, ""); return; } } // 是否有上传的权限 if (!uploadDir.canWrite()) { backInfo(response, false, 5, ""); return; } //新文件名 String newname = ""; /*if(null != filePre){ newname += filePre;//对应模块上传的文件名前缀 }*/ newname += "test1111" + "." + fileSuffix; File saveFile = new File(uploadPath, newname); try { file.transferTo(saveFile); backInfo(response, true, 0, newname); } catch (Exception e) { //LOG.error(e.getMessage(), e); backInfo(response, false, 1, ""); return; } } else { backInfo(response, false, -1, ""); return; } } // 返回信息 private void backInfo(HttpServletResponse response, boolean flag, int message, String fileName) { String json = ""; if (flag) { json = "{ \"status\": \"success"; } else { json = "{ \"status\": \"error"; } json += "\",\"fileName\": \"" + fileName + "\",\"message\": \"" + message + "\"}"; try { response.setContentType("text/html;charset=utf-8"); response.getWriter().write(json); } catch (IOException e) { //LOG.error(e.getMessage(), e); } } }
2、前台接受代码
使用ajaxfileupload时,首先下载ajaxfileupload文件,导入对应的js文件
<script type="text/javascript" src="js/ajaxfileupload.js"></script>
文件传输字段必须为file类型,如下:
<input type="file" id="file" name="file" onchange="ajaxFileUpload();"/>
其次,处理上传文件:
function ajaxFileUpload() { $.ajaxFileUpload({ type: "POST", async: false, data: { "op": 'getImageUpload'}, url:"Replay_ExpertManageController.do", dataType: 'json', secureuri: false, fileElementId: "upload", success: function(data, status) { if (data.status == "success") { //上传成功 alert("上传照片成功"); } switch(data.message){ //解析上传状态 case "0" : //上传成功 break; case "-1" : //上传文件不能为空 break; default: //上传失败 break; } return false; }/* , error : function (jqXHR, textStatus, errorThrown) { //弹出jqXHR对象的信息 alert(jqXHR.responseText); //alert(jqXHR.status); //alert(jqXHR.readyState); //alert(jqXHR.statusText); //弹出其他两个参数的信息 //alert(textStatus); alert(errorThrown); return false; } */ }); }
三、由于网上的ajaxuploadfile文件都是高版本的,这里将改版完全版文件传上,自己使用
jQuery.extend({ handleError: function( s, xhr, status, e ) { // If a local callback was specified, fire it if ( s.error ) { s.error.call( s.context || s, xhr, status, e ); } // Fire the global callback if ( s.global ) { (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] ); } }, createUploadIframe: function(id, uri) { var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { if(jQuery.browser.version=="9.0") { io = document.createElement('iframe'); io.id = frameId; io.name = frameId; } else if(jQuery.browser.version=="6.0" || jQuery.browser.version=="7.0" || jQuery.browser.version=="8.0") { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />'); if(typeof uri== 'boolean'){ io.src = 'javascript:false'; } else if(typeof uri== 'string'){ io.src = uri; } } } else { var io = document.createElement('iframe'); io.id = frameId; io.name = frameId; } io.style.position = 'absolute'; io.style.top = '-1000px'; io.style.left = '-1000px'; document.body.appendChild(io); return io; }, ajaxUpload:function(s,xml){ //if((fromFiles.nodeType&&!((fileList=fromFiles.files)&&fileList[0].name))) var uid = new Date().getTime(),idIO='jUploadFrame'+uid,_this=this; var jIO=$('<iframe name="'+idIO+'" id="'+idIO+'" style="display:none">').appendTo('body'); var jForm=$('<form action="'+s.url+'" target="'+idIO+'" method="post" enctype="multipart/form-data"></form>').appendTo('body'); var oldElement = $('#'+s.fileElementId); var newElement = $(oldElement).clone(); $(oldElement).attr('id', 'jUploadFile'+uid); $(oldElement).before(newElement); $(oldElement).appendTo(jForm); this.remove=function() { if(_this!==null) { jNewFile.before(jOldFile).remove(); jIO.remove();jForm.remove(); _this=null; } } this.onLoad=function(){ var data=$(jIO[0].contentWindow.document.body).text(); try{ if(data!=undefined){ data = eval('(' + data + ')'); try { if (s.success) s.success(data, status); // Fire the global callback if(s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]); if (s.complete) s.complete(data, status); xml = null; } catch(e) { status = "error"; jQuery.handleError(s, xml, status, e); } // The request was completed if(s.global) jQuery.event.trigger( "ajaxComplete", [xml, s] ); // Handle the global AJAX counter if (s.global && ! --jQuery.active ) jQuery.event.trigger("ajaxStop"); // Process result } }catch(ex){ alert(ex.message); }; } this.start=function(){jForm.submit();jIO.load(_this.onLoad);}; return this; }, createUploadForm: function(id, url,fileElementId, data) { //create form var formId = 'jUploadForm' + id; var fileId = 'jUploadFile' + id; var form = jQuery('<form action="'+url+'" 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 attributes jQuery(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 // Create the request object var xml = {}; s = jQuery.extend({}, jQuery.ajaxSettings, s); if(window.ActiveXObject){ var upload = new jQuery.ajaxUpload(s,xml); upload.start(); }else{ var id = new Date().getTime(); var form = jQuery.createUploadForm(id,s.url, 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 requests if ( s.global && ! jQuery.active++ ) { jQuery.event.trigger( "ajaxStart" ); } var requestDone = false; if ( s.global ) jQuery.event.trigger("ajaxSend", [xml, s]); // Wait for a response to come back var 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 notmodified if ( 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 data if (s.success) s.success(data, status); // Fire the global callback if(s.global) jQuery.event.trigger("ajaxSuccess", [xml, s]); if (s.complete) s.complete(data, status); } else jQuery.handleError(s, xml, status); } catch(e) { status = "error"; jQuery.handleError(s, xml, status, e); } // The request was completed if(s.global) jQuery.event.trigger( "ajaxComplete", [xml, s] ); // Handle the global AJAX counter if (s.global && ! --jQuery.active ) jQuery.event.trigger("ajaxStop"); // Process result jQuery(io).unbind(); setTimeout(function() { try { jQuery(io).remove(); jQuery(form).remove(); } catch(e) { jQuery.handleError(s, xml, null, e); } }, 100); xml = null; } }; // Timeout checker if (s.timeout>0) { setTimeout(function(){ // Check to see if the request is still happening if( !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 context if ( type == "script" ) jQuery.globalEval( data ); // Get the JavaScript object, if JSON is used. if ( type == "json" ){ eval( "data = " + $(data).html() ); } // evaluate scripts within html if ( type == "html" ) jQuery("<p>").html(data).evalScripts(); return data; } });
【相关推荐】
1. Java免费视频教程
2. JAVA教程手册
The above is the detailed content of Code example of using ajaxfileupload to implement refresh-free upload. For more information, please follow other related articles on the PHP Chinese website!

Amazon Simple Storage Service,简称Amazon S3,是一种使用 Web 界面提供存储对象的存储服务。Amazon S3 存储对象可以存储不同类型和大小的数据,从应用程序到数据存档、备份、云存储、灾难恢复等等。该服务具有可扩展性,用户只需为存储空间付费。Amazon S3 有四个基于可用性、性能率和持久性的存储类别。这些类包括 Amazon S3 Standard、Amazon S3 Standard Infrequent Access、Amazon S3 One

怎么处理文件上传?下面本篇文章给大家介绍一下node项目中如何使用express来处理文件的上传,希望对大家有所帮助!

Vue作为目前前端开发最流行的框架之一,其实现文件上传功能的方式也十分简单优雅。本文将为大家介绍在Vue中如何实现文件上传功能。HTML部分在HTML文件中添加如下代码,创建上传表单:<template><div><formref="uploadForm"enc

CakePHP是一个开源的Web应用程序框架,它基于PHP语言构建,可以简化Web应用程序的开发过程。在CakePHP中,处理文件上传是一个常见的需求,无论是上传头像、图片还是文档,都需要在程序中实现相应的功能。本文将介绍CakePHP中如何处理文件上传的方法和一些注意事项。在Controller中处理上传文件在CakePHP中,上传文件的处理通常在Cont

在实际开发项目过程中有时候需要上传比较大的文件,然后呢,上传的时候相对来说就会慢一些,so,后台可能会要求前端进行文件切片上传,很简单哈,就是把比如说1个G的文件流切割成若干个小的文件流,然后分别请求接口传递这个小的文件流。

在Web应用程序的开发中,文件上传功能已经成为了基本的需求。这个功能允许用户向服务器上传自己的文件,然后在服务器上进行存储或处理。然而,这个功能也使得开发者更需要注意一个安全漏洞:文件上传漏洞。攻击者可以通过上传恶意文件来攻击服务器,从而导致服务器遭受不同程度的破坏。PHP语言作为广泛应用于Web开发中的语言之一,文件上传漏洞也是常见的安全问题之一。本文将介

近年来,Web应用程序逐渐流行,而其中许多应用程序都需要文件上传功能。在Django框架中,实现上传文件功能并不困难,但是在实际开发中,我们还需要处理上传的文件,其他操作包括更改文件名、限制文件大小等问题。本文将分享一些Django框架中的文件上传技巧。一、配置文件上传项在Django项目中,要配置文件上传需要在settings.py文件中进

PHP是一种常用的Web开发语言,很多网站都采用PHP来开发和维护,而其中最常见的功能之一是文件上传。在PHP中,文件上传的过程虽然相对简单,但是有时会遇到需要改变上传文件名字的情况。本文将介绍如何在PHP中实现上传文件并改变上传文件的名称。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Dreamweaver CS6
Visual web development tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

MantisBT
Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment
