文件下载(xls、txt、pdf)格式

1、遇到要把查询的数据通过浏览器下载。

    在服务器端把数据转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下) 

 

 /**

   * 写text文件

   * @param response

   * @param modelfile

   * @param titlename

   * @param beginrow

   * @param begincol

   * @param values

   */

  public static void writeText(HttpServletResponse response,String modelfile,String titlename,int beginrow,int begincol, Vector values) {

   if(values == null) return;

   try {

StringBuffer strBuffer=new StringBuffer();

 for(int row=0; row<values.size(); row++){

 Vector colvalues = (Vector)values.elementAt(row);

 if(colvalues != null){

 for(int col=0;col<colvalues.size();col++){

 Object colvalue = colvalues.elementAt(col);

 if(colvalue != null){strBuffer.append(colvalue.toString()+"  ");}

 } 

 strBuffer.append("\n");

 }

 } 

 

 response.setContentType("application/ms-text");

 response.setHeader("Content-Disposition",

                        "attachment;filename=" +

                        new String( (titlename + ".txt").getBytes(), "iso-8859-1"));

 

 OutputStream outputStream = response.getOutputStream(); 

 

 byte[] buffer= strBuffer.toString().getBytes();

 outputStream.write(buffer);

 

 outputStream.flush(); 

 outputStream.close(); 

 outputStream = null; 

 

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}   

  

 }

 

 

 

 

 

 

 

2、把服务器中的文件下载,不暴露文件地址,主要是为了控制权限。

     在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下) 

<% 
response.setContentType(fileminitype); 
response.setHeader("Location",filename); 
response.setHeader("Cache-Control", "max-age=" + cacheTime); 
//filename应该是编码后的(utf-8) 
response.setHeader("Content-Disposition", "attachment; filename=" + filename); 

response.setContentLength(filelength); 
OutputStream outputStream = response.getOutputStream(); 
InputStream inputStream = new FileInputStream(filepath); 
byte[] buffer = new byte[1024]; 
int i = -1; 
while ((i = inputStream.read(buffer)) != -1) { 
outputStream.write(buffer, 0, i); 

outputStream.flush(); 
outputStream.close(); 
inputStream.close(); 
outputStream = null; 

%> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值