1 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 2 //获取文件名 3 String fileName=req.getParameter("fileName"); 4 //获取文件后缀名 5 String str=fileName.substring(fileName.lastIndexOf(".")); 6 //设置响应头, 7 resp.setHeader("Content-Disposition","attachment; filename="+ 8 System.currentTimeMillis()+str); 9 //获得绝对路径 10 String path=this.getServletContext().getRealPath(fileName); 11 12 InputStream in=null; 13 ServletOutputStream serOut=null; 14 try{ 15 //创建文件 16 File file=new File(path); 17 in=new FileInputStream(file); 18 serOut=resp.getOutputStream(); 19 20 byte[] by=new byte[1024]; 21 int len; 22 while((len=in.read(by))!=-1){ 23 serOut.write(by, 0, by.length); 24 } 25 }catch(Exception e){ 26 27 }finally { 28 if(serOut!=null){ 29 serOut.close(); 30 } 31 if (in!=null) { 32 in.close(); 33 } 34 } 35 36 37 }
目的,下载网络上的文件。期间共出现两次问题,都不是代码的缘故。
第一次,相关的下载文件的文件夹,位置没放到对,放到WEB-INF了,所以获得的文件绝对路径找不到文件,导致输入流出现异常,下载下来的文件大小为0kb
把文件夹放到外面,WebContent中,就解决了
把第一个问题件解决了,第一个文件下载下来,没有问题,但是下载第二个文件的时候,又出现了之前的问题
在用断点调试的过程中,发现获得的文件名中有乱码,不能获取到File对象,经过对比,发现是文件名中有中文,修改,同事修改超链接中的参数,就ok,至于怎样在不修改中文的情况下搞定,暂时还没学到。