1 16 package org.mortbay.servlet; 17 18 import java.io.File ; 19 import java.io.FileOutputStream ; 20 import java.io.IOException ; 21 import java.io.InputStream ; 22 23 import javax.servlet.Filter ; 24 import javax.servlet.FilterChain ; 25 import javax.servlet.FilterConfig ; 26 import javax.servlet.ServletContext ; 27 import javax.servlet.ServletException ; 28 import javax.servlet.ServletRequest ; 29 import javax.servlet.ServletResponse ; 30 import javax.servlet.http.HttpServletRequest ; 31 import javax.servlet.http.HttpServletResponse ; 32 33 import sun.reflect.ReflectionFactory.GetReflectionFactoryAction; 34 35 36 54 public class PostFileFilter implements Filter 55 { 56 ServletContext _context; 57 int _bufferSize=8092; 58 String _response="nocontent"; 59 60 public void init(FilterConfig filterConfig) 61 throws ServletException 62 { 63 _context=filterConfig.getServletContext(); 64 String tmp=filterConfig.getInitParameter("bufferSize"); 65 if (tmp!=null) 66 _bufferSize=Integer.parseInt(tmp); 67 tmp=filterConfig.getInitParameter("response"); 68 if (tmp!=null) 69 _response=tmp; 70 } 71 72 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 73 throws IOException , ServletException 74 { 75 HttpServletRequest srequest = (HttpServletRequest )request; 76 HttpServletResponse sresponse = (HttpServletResponse )response; 77 78 if ("POST".equalsIgnoreCase(srequest.getMethod())) 79 { 80 String filename = srequest.getPathTranslated(); 81 if (filename==null) 82 { 83 if (srequest.getPathInfo()==null) 84 filename=_context.getRealPath(srequest.getServletPath()); 85 else 86 filename=_context.getRealPath(srequest.getServletPath()+srequest.getPathInfo()); 87 } 88 if (filename==null) 89 { 90 sresponse.sendError(HttpServletResponse.SC_NOT_FOUND); 91 return; 92 } 93 94 if (srequest.getContentLength()==0) 95 { 96 sresponse.sendError(HttpServletResponse.SC_LENGTH_REQUIRED); 97 return; 98 } 99 100 File file = new File (filename); 101 102 if (file.exists() && (!file.canWrite() || 103 file.isDirectory()) || 104 !file.exists() && ( !file.getParentFile().exists() || 105 !file.getParentFile().isDirectory() || 106 !file.getParentFile().canWrite())) 107 { 108 sresponse.sendError(HttpServletResponse.SC_FORBIDDEN, "No write permission"); 109 return; 110 } 111 112 InputStream in = srequest.getInputStream(); 113 FileOutputStream out = new FileOutputStream (file,false); 114 byte[] buf = new byte[_bufferSize]; 115 while (true) 116 { 117 int len=in.read(buf); 118 if (len<0) 119 break; 120 out.write(buf,0,len); 121 } 122 out.close(); 123 124 if ("redirect".equalsIgnoreCase(_response)) 125 sresponse.sendRedirect(srequest.getRequestURI()); 126 else if ("chain".equalsIgnoreCase(_response)) 127 chain.doFilter(request, response); 128 else if ("ok".equalsIgnoreCase(_response)) 129 sresponse.setStatus(HttpServletResponse.SC_OK); 130 else 131 sresponse.setStatus(HttpServletResponse.SC_NO_CONTENT); 132 } 133 else 134 chain.doFilter(request, response); 135 136 } 137 138 public void destroy() 139 {} 140 141 } 142 | Popular Tags |