A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CrazyProgram 中级黑马   /  2013-4-19 09:48  /  1383 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 CrazyProgram 于 2013-5-2 08:53 编辑
  1. package zhiwei.deng.web.servlet.download;

  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. import java.io.PrintWriter;
  7. import java.net.URLEncoder;

  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;

  12. import zhiwei.deng.web.servlet.util.UploadUtil;

  13. //将文件下载到本地
  14. public class DownloadServlet extends HttpServlet {
  15.         public void doGet(HttpServletRequest request, HttpServletResponse response)
  16.                         throws ServletException, IOException {
  17.                 doPost(request, response);
  18.         }

  19.         public void doPost(HttpServletRequest request, HttpServletResponse response)
  20.                         throws ServletException, IOException {

  21.                 String uuidFileName = request.getParameter("uuidFileName");
  22.                 byte[] buf = uuidFileName.getBytes("ISO-8859-1");
  23.                 uuidFileName = new String(buf, "utf-8");
  24.                 int index = uuidFileName.indexOf("_");
  25.                 String realFileName = uuidFileName.substring(index+1);
  26.                 //response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode(realFileName,"UTF-8"));
  27.                 response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(realFileName,"utf-8"));

  28.                 String uploadPath = this.getServletContext().getRealPath(UploadUtil.uploadPath);
  29.                 System.out.println(uploadPath);
  30.                 String uuidFilePath = UploadUtil.makeUuidFilePath(uploadPath, uuidFileName);
  31.                 System.out.println(uuidFilePath);//-----uuidFilePath没得到正确的
  32.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(uuidFilePath+"/"+uuidFileName));
  33.                 BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
  34.                 int len=0;
  35.                 buf = new byte[1024];
  36.                 while((len=bis.read(buf))>0){
  37.                         bos.write(buf, 0, len);
  38.                 }
  39.                 bis.close();
  40.                 bos.close();
  41.         }
  42. }
复制代码
  1.         public static  String makeUuidFilePath(String uploadPath, String uuidFileName) {
  2.                 String uuidFilePath = null;
  3.                 int code = uuidFileName.hashCode();//打印文件名的hashcode码,
  4.                 int dir1 = code & 0xF;//设置一级目录
  5.                 int dir2 = code >> 4 & 0xF;
  6.                 File file = new File(uploadPath+"/"+dir1+"/"+dir2);
  7.                 if(!file.exists()){
  8.                         //如果目录不存在,一次性创建
  9.                         file.mkdirs();
  10.                         uuidFilePath = file.getPath();
  11.                 }else{
  12.                         uuidFilePath = file.getPath();
  13.                 }
  14.                 return uuidFilePath;
  15.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

2 个回复

倒序浏览
打断点走一下代码,有可能是中文编码问题,查看一下jsp页面的编码,如果页面与servlet的编码不一致,会出现中文乱码问题。

回复 使用道具 举报
刘沛霞 发表于 2013-5-1 09:12
打断点走一下代码,有可能是中文编码问题,查看一下jsp页面的编码,如果页面与servlet的编码不一致,会出现 ...

唉,好辛苦,一句一句通读了一遍。。。还好算是搞定了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马