web.xml
<filter> <filter-name>uploadFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>uploadFilter</filter-name> <url-pattern>/service/CmmService/Add</url-pattern> </filter-mapping>注意这个过滤器其实是一个DelegatingFilterProxy,这个过滤器里没有实现过滤器的任何逻辑。 DelegatingFilterProxy做的事情是代理Filter的方法,从application context里获得bean。 这让bean可以获得spring web application context的生命周期支持,使配置较为轻便。 bean必须实现javax.servlet.Filter接口,它必须和filter-name里定义的名称是一样的
<bean id="uploadFilter" class="cn.tv189.comment.service.filter.UploadFilter"> <property name="commentInfoLogic"> <ref bean="commentInfoLogic"/> </property> </bean>
UploadFilter.java
package cn.tv189.comment.service.filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import cn.tv189.comment.domain.ECommentType; import cn.tv189.comment.helper.StringHelper; import cn.tv189.comment.service.helper.MsgCodeInfo; import cn.tv189.comment.service.logic.CommentInfoLogic; public class UploadFilter implements Filter{ private static Logger logger = Logger.getLogger(UploadFilter.class); private CommentInfoLogic commentInfoLogic; private HttpServletRequest request; private HttpServletResponse response; /* (non-Javadoc) * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } /* (non-Javadoc) * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) */ @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { setRequest((HttpServletRequest) req); setResponse((HttpServletResponse) res); String version = request.getParameter(MsgCodeInfo.VERSION); String commentType = request.getParameter(MsgCodeInfo.COMMENT_TYPE); //当调用添加评论接口并且v=3,commentType=3的时候,进行语音文件操作 if("3".equals(version) && ECommentType.Audio.getValue().toString().equals(commentType)){ String jsonStr = commentInfoLogic.uploadAudioCommentInfo(request); if(!StringHelper.isNullOrEmpty(jsonStr)){ outJSON(jsonStr); }else{ chain.doFilter(req, res); } }else{ chain.doFilter(req, res); } } public void outJSON(String str) { //上线的时候,以JSON的方式进行传输. try { getResponse().setHeader("Pragma", "no-cache"); getResponse().setHeader("Cache-Control", "no-cache"); getResponse().setDateHeader("Expires", 0); getResponse().setContentType("text/javascript;charset=utf-8"); } finally { outSTR(str); } } private final void outSTR(String str) { PrintWriter out = null; try { out = getResponse().getWriter(); { out.write(str); } } catch (IOException e) { logger.error("输出异常", e); } finally { if (out != null) { out.flush(); out.close(); } } } /* (non-Javadoc) * @see javax.servlet.Filter#destroy() */ @Override public void destroy() { // TODO Auto-generated method stub } public HttpServletRequest getRequest() { return request; } public void setRequest(HttpServletRequest request) { this.request = request; } public HttpServletResponse getResponse() { return response; } public void setResponse(HttpServletResponse response) { this.response = response; } public CommentInfoLogic getCommentInfoLogic() { return commentInfoLogic; } public void setCommentInfoLogic(CommentInfoLogic commentInfoLogic) { this.commentInfoLogic = commentInfoLogic; } }CommentInfoLogic.java
引用的类:
import javax.servlet.http.HttpServletRequest; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;
private String commentPath; public String getCommentPath() { return commentPath; } public void setCommentPath(String commentPath) { this.commentPath = commentPath; } /** * @param request * @return */ public String uploadAudioCommentInfo(HttpServletRequest request) { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); ResultProxy result = new ResultProxy(); String jsonStr = ""; String relativePath = ""; try { boolean isMulitpart = ServletFileUpload.isMultipartContent(request); if(isMulitpart){ // FileItemFactory fif = upload.getFileItemFactory(); FileItemIterator iter = upload.getItemIterator(request); boolean audioIoEmpty = false; boolean makeDirFail = false; while(iter.hasNext()){ FileItemStream item = iter.next(); if(item.isFormField()){ String name = item.getFieldName(); // String value = item.getString(); }else{ String fieldName = item.getFieldName(); String fileName = item.getName(); int index = fileName.indexOf("."); String suffix = fileName.substring(index, fileName.length()); String contentType = item.getContentType(); // boolean isInMemory = item.isInMemory(); // long sizeInBytes = item.getSize(); if(MsgCodeInfo.COMMENT_AUDIO.equals(fieldName)){ // InputStream is = item.getInputStream(); InputStream is = item.openStream(); if(is == null){ audioIoEmpty = true; } String tmpPath = UploadHelper.saveAudioFile(is, suffix); if(tmpPath == null){ makeDirFail = true; } relativePath += tmpPath + ","; } } } if(audioIoEmpty){ result.setCodeAndMsg(MsgCodeInfo.ERROR_AUDIO_IO_EMPTY); jsonStr = JsonHelper.toJson(result); } if(makeDirFail){ result.setCodeAndMsg(MsgCodeInfo.ERROR_MAKE_DIR_FAIL); jsonStr = JsonHelper.toJson(result); } }else{ result.setCodeAndMsg(MsgCodeInfo.ERROR_NOT_MULTIPART_REQUEST); } } catch (FileUploadException e) { logger.error(e.getMessage(), e); result.setCodeAndMsg(MsgCodeInfo.ERROR_FILE_UPLOAD_FAIL); jsonStr = JsonHelper.toJson(result); } catch (IOException e) { logger.error(e.getMessage(), e); result.setCodeAndMsg(MsgCodeInfo.ERROR_IO_STREAM_FAIL); jsonStr = JsonHelper.toJson(result); } if(!StringHelper.isNullOrEmpty(relativePath)){ setCommentPath(","+relativePath); }else{ setCommentPath("上传语音失败"); } return jsonStr; }
spring+DelegatingFilterProxy拦截器实现文件上传,布布扣,bubuko.com
spring+DelegatingFilterProxy拦截器实现文件上传
原文:http://blog.csdn.net/dingli3213/article/details/20383731