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

Jsp/Servlet

开发平台:

Java

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ page import="java.io.BufferedInputStream"%>
  3. <%@ page import="java.io.FileInputStream"%>
  4. <%@ page import="java.io.BufferedOutputStream"%>
  5. <%!/**
  6.  * 将文件名中的汉字转为UTF8编码的串,以便下载时能正确显示另存的文件名.
  7.  * @param s 原文件名
  8.  * @return 重新编码后的文件名
  9.  */
  10. public static String toUtf8String(String s) {
  11. StringBuffer sb = new StringBuffer();
  12. for (int i = 0; i < s.length(); i++) {
  13. char c = s.charAt(i);
  14. if (c >= 0 && c <= 255) {
  15. sb.append(c);
  16. } else {
  17. byte[] b;
  18. try {
  19. b = Character.toString(c).getBytes("utf-8");
  20. } catch (Exception ex) {
  21. System.out.println(ex);
  22. b = new byte[0];
  23. }
  24. for (int j = 0; j < b.length; j++) {
  25. int k = b[j];
  26. if (k < 0)
  27. k += 256;
  28. sb.append("%" + Integer.toHexString(k).toUpperCase());
  29. }
  30. }
  31. }
  32. return sb.toString();
  33. }
  34. /**
  35.  * Utf8URL解码
  36.  * @param text
  37.  * @return
  38.  */
  39. public String Utf8URLdecode(String text) {
  40. String result = "";
  41. int p = 0;
  42. if (text != null && text.length() > 0) {
  43. text = text.toLowerCase();
  44. p = text.indexOf("%e");
  45. if (p == -1) {
  46. return text;
  47. }
  48. while (p != -1) {
  49. result += text.substring(0, p);
  50. text = text.substring(p, text.length());
  51. if (text == "" || text.length() < 9) {
  52. return result;
  53. }
  54. result += CodeToWord(text.substring(0, 9));//调用CodeToWord方法
  55. text = text.substring(9, text.length());
  56. p = text.indexOf("%e");
  57. }
  58. }
  59. return result + text;
  60. }
  61. /**
  62.  * utf8URL编码转字符
  63.  * @param text
  64.  * @return
  65.  */
  66. private String CodeToWord(String text) {
  67. String result;
  68. if (Utf8codeCheck(text)) {//调用Utf8codeCheck方法
  69. byte[] code = new byte[3];
  70. code[0] = (byte) (Integer.parseInt(text.substring(1, 3), 16) - 256);
  71. code[1] = (byte) (Integer.parseInt(text.substring(4, 6), 16) - 256);
  72. code[2] = (byte) (Integer.parseInt(text.substring(7, 9), 16) - 256);
  73. try {
  74. result = new String(code, "UTF-8");
  75. } catch (Exception ex) {
  76. result = null;
  77. }
  78. } else {
  79. result = text;
  80. }
  81. return result;
  82. }
  83. /**
  84.  * 编码是否有效
  85.  * @param text
  86.  * @return
  87.  */
  88. private boolean Utf8codeCheck(String text) {
  89. String sign = "";
  90. if (text.startsWith("%e")) {
  91. for (int i = 0, p = 0; p != -1; i++) {
  92. p = text.indexOf("%", p);
  93. if (p != -1) {
  94. p++;
  95. }
  96. sign += p;
  97. }
  98. }
  99. return sign.equals("147-1");
  100. }
  101. %>
  102. <%
  103. String path = request.getContextPath();
  104. String basePath = request.getScheme() + "://"
  105. + request.getServerName() + ":" + request.getServerPort()
  106. + path + "/";
  107. BufferedInputStream bis = null;
  108. BufferedOutputStream bos = null;
  109. try {
  110. String filename = request.getParameter("filename");
  111. System.out.println("1:" + filename);
  112. filename = toUtf8String(filename);
  113. System.out.println("2:" + filename);
  114. response.setContentType("application/x-msdownload;charset=gbk");
  115. response.setHeader("Content-disposition", "attachment; "
  116. + "filename=" + filename);
  117. filename = Utf8URLdecode(filename);
  118. System.out.println("3:" + filename);
  119. System.out.println(config.getServletContext().getRealPath(
  120. "/upload/affiche" + filename));
  121. bis = new BufferedInputStream(new FileInputStream(config
  122. .getServletContext().getRealPath("/upload/affiche")
  123. + "/" + filename));
  124. bos = new BufferedOutputStream(response.getOutputStream());
  125. byte[] buff = new byte[2048];
  126. int bytesRead;
  127. while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
  128. bos.write(buff, 0, bytesRead);
  129. }
  130. } catch (Exception e) {
  131. //e.printStackTrace();
  132. } finally {
  133. if (bis != null)
  134. bis.close();
  135. if (bos != null)
  136. bos.close();
  137. }
  138. %>