利用Servlet实现文件的下载

Servlet实现文件下载的核心代码:

 

import  javax.servlet. * ;
import  javax.servlet.http. * ;

import  java.io. * ;
import  java.util. * ;

public   class  DownLoadFileServlet  extends  HttpServlet 
{
    
public void doPost(HttpServletRequest req,HttpServletResponse res)
        
throws ServletException,IOException
    
{
        String password 
= req.getParameter("password");
        
if((!checkPassword(password))||(password==null))
        
{
            
//指定内容类型,并且可显示中文
            res.setContentType("text/html;charset=gb2312");
            
//取得要在响应中输出的文本流,即标准的html
            PrintWriter out = res.getWriter();

            
//输出页面头部信息
            out.println("<head><title>下载信息</title></head>");
            out.println(
"<H1 align='center'>你输入的注册码不正确</H1><hr>");
        }

        
else
        
{
            
long totalSize = 0;
            
//取得要传输的文件,实际应用时可以将文件路径以参数的形式传入
            File f = new File("D:/Program Files/Tomcat 5.0/webapps/ROOT/WEB-INF/classes/sample.pdf");
            
long filelength = f.length();
            
byte[] b = new byte[1024];

            
//设置文件输出流
            FileInputStream fin = new FileInputStream(f);
            DataInputStream in 
= new DataInputStream(fin);
            
//设置响应头信息,让下载的文件显示保存信息
            res.setHeader("Content-disposition",
                
"attachment;filename=" + "sample.pdf");
            
//设置输出流的MIME类型
            res.setContentType("application/pdf");
            
//确定长度
            String fileSize = Long.toString(filelength);
            
//设置输出文件的长度
            res.setHeader("Content-Length",fileSize);
            
//取出输出流
            ServletOutputStream servletOut = res.getOutputStream();
            
//发送文件数据,每次1024字节,最后一次单独计算
            while(totalSize<filelength)
            
{
                totalSize 
+= 1024;
                
if(totalSize>filelength)
                
{
                    
//最后一次传送的字节数
                    byte[] leftpart = new byte[1024-(int)(totalSize-filelength)];
                    in.readFully(leftpart);
//读入字节数组
                    servletOut.write(leftpart);//写入输出流
                }

                
else
                
{
                    in.readFully(b);
//读入1024个字节到字节数组b
                    servletOut.write(b);//写出输出流
                }

            }

            servletOut.close();
        }

    }


    
/*public static void main(String[] args) 
    {
        System.out.println("Hello World!");
    }
*/


    
//验证注册信息,在实际应用时可以换成到数据库中的验证
    private boolean checkPassword(String s)
    
{
        String[] passwords 
= {"aaa","bbb","ccc","ddd","eee",
            
"fff","ggg","hhh","lll","mmm"}
;
        
boolean flag = false;
        
for (int i=0;i<passwords.length ;i++ )
        
{
            
if(s.equals(passwords[i]))
            
{
                flag 
= true;
                
break;
            }

        }

        
return flag;
    }


    
public void init(ServletConfig cfg) 
        
throws ServletException
    
{
        
super.init(cfg);
    }


    
public void destroy()
    
{
        
super.destroy();
    }

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值