spring+DelegatingFilterProxy拦截器实现文件上传
2014-03-03 16:55
148 查看
web.xml
application context的生命周期支持,使配置较为轻便。 bean必须实现javax.servlet.Filter接口,它必须和filter-name里定义的名称是一样的
spring-ioc.xml
注意:spring-ioc.xml中的id要与web.xml中filter的filter-name名字一样
UploadFilter.java
引用的类:
上传方法:
<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里定义的名称是一样的
spring-ioc.xml
<bean id="uploadFilter" class="cn.tv189.comment.service.filter.UploadFilter"> <property name="commentInfoLogic"> <ref bean="commentInfoLogic"/> </property> </bean>
注意:spring-ioc.xml中的id要与web.xml中filter的filter-name名字一样
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; }
相关文章推荐
- [PHP实例] PHP多文件上传实现
- php实现多文件上传和下载。
- java实现文件上传与下载
- Asp.Net+flash as3 文件上传实现进度条代码片段
- Java 使用Socket实现文件上传与下载
- java最基本实现文件上传的过程
- 使用servlet实现简易上传文件(带进度条版本)
- 大文件上传实现
- H5 formData实现批量ajax上传文件
- atitit.ajax上传文件的实现原理 与设计
- 使用servletfileupload实现表单文件和数据的一起上传
- 用Java写个ftp传输类实现文件的上传和下载,用ikvmc转成dll
- Jsp+Servlet实现文件上传下载——前台页面开发
- java web 一行代码实现文件上传下载
- Apache Commons fileUpload实现文件上传
- AJAX加FormDaTA实现文件上传[laravel框架下实现]
- Asp.net实现文件上传
- Ext2.1 + Struts2 实现简单的文件上传
- Thinkphp多文件上传实现方法
- 使用IIS作文件服务,使用C#实现上传删除