DownLoadServlet.java
上传用户:lm2018
上传日期:2015-12-12
资源大小:30449k
文件大小:4k
源码类别:

Jsp/Servlet

开发平台:

Java

  1. package com.oa.module.folder;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.io.PrintWriter;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. /**
  12.  * 文件下载
  13.  * filename:文件名
  14.  * filepath:文件路径
  15.  * @author MY-PC
  16.  *
  17.  */
  18. public class DownLoadServlet extends HttpServlet {
  19. public void doGet(HttpServletRequest request, HttpServletResponse response)
  20. throws ServletException, IOException {
  21. response.setContentType("text/html");
  22. InputStream input = null;
  23. OutputStream output = null;
  24. try {
  25. String filename = request.getParameter("filename");
  26.  String filepath = request.getParameter("filepath");
  27. filename = toUtf8String(filename);
  28.  filepath = toUtf8String(filepath);
  29. System.out.println("2:" + filename);
  30. response.setContentType("application/x-msdownload;charset=gbk");
  31. response.setHeader("Content-disposition", "attachment; "
  32. + "filename=" + filename);
  33. filename = Utf8URLdecode(filename);
  34.  filepath = Utf8URLdecode(filepath);
  35. System.out.println("3:" + filename);
  36. String ss = this.getServletContext().getRealPath(filepath+"/" + filename);
  37. System.out.println(ss);
  38. input = new FileInputStream(ss);
  39. output = response.getOutputStream();
  40. byte[] buff = new byte[1024];
  41. int bytesRead = 0;
  42. while ((bytesRead = input.read(buff, 0, buff.length)) != -1) {
  43. System.out.println((char) bytesRead);
  44. output.write(buff, 0, bytesRead);
  45. }
  46. } catch (Exception e) {
  47.  e.printStackTrace();
  48. }  finally {
  49.  if (input != null)
  50.  input.close();
  51.  if (output != null)
  52.  output.close();
  53.  }
  54. }
  55. public static String toUtf8String(String s) {
  56. StringBuffer sb = new StringBuffer();
  57. for (int i = 0; i < s.length(); i++) {
  58. char c = s.charAt(i);
  59. if (c >= 0 && c <= 255) {
  60. sb.append(c);
  61. } else {
  62. byte[] b;
  63. try {
  64. b = Character.toString(c).getBytes("utf-8");
  65. } catch (Exception ex) {
  66. System.out.println(ex);
  67. b = new byte[0];
  68. }
  69. for (int j = 0; j < b.length; j++) {
  70. int k = b[j];
  71. if (k < 0)
  72. k += 256;
  73. sb.append("%" + Integer.toHexString(k).toUpperCase());
  74. }
  75. }
  76. }
  77. return sb.toString();
  78. }
  79. /**
  80.  * Utf8URL解码
  81.  * 
  82.  * @param text
  83.  * @return
  84.  */
  85. public String Utf8URLdecode(String text) {
  86. String result = "";
  87. int p = 0;
  88. if (text != null && text.length() > 0) {
  89. text = text.toLowerCase();
  90. p = text.indexOf("%e");
  91. if (p == -1) {
  92. return text;
  93. }
  94. while (p != -1) {
  95. result += text.substring(0, p);
  96. text = text.substring(p, text.length());
  97. if (text == "" || text.length() < 9) {
  98. return result;
  99. }
  100. result += CodeToWord(text.substring(0, 9));// 调用CodeToWord方法
  101. text = text.substring(9, text.length());
  102. p = text.indexOf("%e");
  103. }
  104. }
  105. return result + text;
  106. }
  107. /**
  108.  * utf8URL编码转字符
  109.  * 
  110.  * @param text
  111.  * @return
  112.  */
  113. private String CodeToWord(String text) {
  114. String result;
  115. if (Utf8codeCheck(text)) {// 调用Utf8codeCheck方法
  116. byte[] code = new byte[3];
  117. code[0] = (byte) (Integer.parseInt(text.substring(1, 3), 16) - 256);
  118. code[1] = (byte) (Integer.parseInt(text.substring(4, 6), 16) - 256);
  119. code[2] = (byte) (Integer.parseInt(text.substring(7, 9), 16) - 256);
  120. try {
  121. result = new String(code, "UTF-8");
  122. } catch (Exception ex) {
  123. result = null;
  124. }
  125. } else {
  126. result = text;
  127. }
  128. return result;
  129. }
  130. /**
  131.  * 编码是否有效
  132.  * 
  133.  * @param text
  134.  * @return
  135.  */
  136. private boolean Utf8codeCheck(String text) {
  137. String sign = "";
  138. if (text.startsWith("%e")) {
  139. for (int i = 0, p = 0; p != -1; i++) {
  140. p = text.indexOf("%", p);
  141. if (p != -1) {
  142. p++;
  143. }
  144. sign += p;
  145. }
  146. }
  147. return sign.equals("147-1");
  148. }
  149. public void doPost(HttpServletRequest request, HttpServletResponse response)
  150. throws ServletException, IOException {
  151. doGet(request, response);
  152. }
  153. public void init() throws ServletException {
  154. // Put your code here
  155. }
  156. }