您的位置:首页 > 编程语言 > Java开发

spring+DelegatingFilterProxy拦截器实现文件上传

2014-03-03 16:55 148 查看
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里定义的名称是一样的

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: