Servlet文件下载

来源:互联网 发布:淘宝9月9号有活动吗 编辑:程序博客网 时间:2024/06/01 10:19

servlet文件下载

/** * @author Administrator * 文件下载 */public class DownloadServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取uuidRealFileNameString uuidRealFileName = request.getParameter("uuidRealFileName");//还原byte[] buf = uuidRealFileName.getBytes("ISO8859-1");//手工解码uuidRealFileName = new String(buf,"UTF-8");//获取realFileNameint index = uuidRealFileName.indexOf("_");String realFileName = uuidRealFileName.substring(index+1);//通知浏览器以下载方式打开文件//response.setHeader("content-type","application/x-msdownload");response.setHeader("content-disposition","attachment;filename="+URLEncoder.encode(realFileName,"UTF-8"));//以IO流方式将服务端的文件复制给客户端String uploadPath = this.getServletContext().getRealPath("/WEB-INF/upload");String subUploadPath = makeSubUpload(uploadPath,uuidRealFileName);InputStream is = new FileInputStream(subUploadPath + "/" + uuidRealFileName);OutputStream os = response.getOutputStream();buf = new byte[2048];int len = 0;while((len=is.read(buf))>0){os.write(buf,0,len);}os.close();is.close();}//通过这个算法,得到下载文件的位置private String makeSubUpload(String uploadPath,String uuidRealFileName){//获取hashCode整型值int code = uuidRealFileName.hashCode();//第一级子目录int dir1 = code & 0xF;//12//第二级子目录int dir2 = ( code >> 1 ) & 0xF;//6 //创建这些子目录File file = new File(uploadPath+"/"+dir1+"/"+dir2);//如果不存在该子目录if(!file.exists()){//连续创建2个子目录file.mkdirs();}//将创建后的子目录返回return file.getPath();} }


 

 

0 0
原创粉丝点击