1 16 17 package info.jtrac.util; 18 19 import java.io.BufferedInputStream ; 20 import java.io.BufferedOutputStream ; 21 import java.io.File ; 22 import java.io.FileInputStream ; 23 import java.io.InputStream ; 24 import java.io.OutputStream ; 25 import java.net.URLDecoder ; 26 import java.net.URLEncoder ; 27 28 import javax.servlet.ServletContext ; 29 import javax.servlet.http.HttpServletRequest ; 30 import javax.servlet.http.HttpServletResponse ; 31 32 36 public class AttachmentUtils { 37 38 public static String cleanFileName(String path) { 39 int index = path.lastIndexOf('/'); 41 if (index == -1) { 42 index = path.lastIndexOf('\\'); 43 } 44 return (index != -1 ? path.substring(index + 1) : path); 45 } 46 47 public static void download(ServletContext servletContext, HttpServletRequest request, HttpServletResponse response) throws Exception { 48 49 String fileName = URLDecoder.decode(cleanFileName(request.getRequestURI()), "UTF-8"); 50 String filePrefix = request.getParameter("filePrefix"); 51 File file = new File (System.getProperty("jtrac.home") + "/attachments/" + filePrefix + "_" + fileName); 52 if (file.canRead()) { 53 InputStream in = null; 54 OutputStream out = null; 55 try { 56 in = new FileInputStream (file); 57 if (in != null) { 58 out = new BufferedOutputStream (response.getOutputStream()); 59 in = new BufferedInputStream (in); 60 String contentType = servletContext.getMimeType(fileName); 62 if (contentType == null) { 63 contentType = "application/octet-stream"; 64 } 65 response.setContentType(contentType); 66 String name = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); 68 response.setHeader("Content-Disposition", "attachment; filename*=" + name); 72 int c; 73 while ((c = in.read()) != -1) { 74 out.write(c); 75 } 76 return; 77 } 78 } finally { 79 in.close(); 80 out.close(); 81 } 82 } 83 response.sendError(HttpServletResponse.SC_NOT_FOUND); 84 } 85 86 } 87 | Popular Tags |