001 package org.shiftone.jrat.http; 002 003 import org.shiftone.jrat.util.io.IOUtil; 004 005 import java.io.File; 006 import java.io.InputStream; 007 import java.io.OutputStream; 008 import java.io.Writer; 009 import java.util.HashMap; 010 import java.util.Map; 011 012 /** 013 * @author jeff@shiftone.org (Jeff Drost) 014 */ 015 public class FsBrowseHandler implements Handler { 016 017 private static final String ROOT = new File("").getAbsolutePath(); 018 private static Map mimeTypes = new HashMap(); 019 020 static { 021 mimeTypes.put("txt", ContentType.TEXT_PLAIN); 022 mimeTypes.put("log", ContentType.TEXT_PLAIN); 023 mimeTypes.put("htm", ContentType.TEXT_HTML); 024 mimeTypes.put("html", ContentType.TEXT_HTML); 025 mimeTypes.put("xml", ContentType.TEXT_XML); 026 } 027 028 public void handle(Request request, Response response) throws Exception { 029 030 response.setContentType(ContentType.TEXT_HTML); 031 032 String uri = request.getRequestUri(); 033 File file = new File(ROOT + uri); 034 035 036 if (file.isDirectory()) { 037 038 Writer writer = response.getWriter(); 039 writer.write("<ul>"); 040 File[] children = file.listFiles(); 041 042 for (int i = 0; i < children.length; i++) { 043 File child = children[i]; 044 if (child.isDirectory()) { 045 writer.write("<li><a href='" + child.getName() + "/'>" + child.getName() + "/</a>"); 046 } else { 047 writer.write("<li><a href='" + child.getName() + "'>" + child.getName() + "</a> "); 048 writer.write(" (" + child.length() + " bytes)"); 049 } 050 } 051 052 writer.write("</ul>"); 053 054 } else { 055 056 String ext = IOUtil.getExtention(file.getName()).toLowerCase(); 057 String contentType = (String) mimeTypes.get(ext); 058 OutputStream outputStream = response.getOutputStream(); 059 InputStream inputStream = null; 060 try { 061 if (contentType == null) { 062 contentType = ContentType.OCTET_STREAM; 063 } 064 response.setContentType(contentType); 065 inputStream = IOUtil.openInputStream(file); 066 IOUtil.copy(inputStream, outputStream); 067 } finally { 068 IOUtil.close(inputStream); 069 } 070 071 } 072 073 074 } 075 }