天空是蓝色的

做好软件为中国 #gcc -c helloworld.c -o helloworld.o //编译目标文件 #gcc helloworld.o -o helloworld //编译成可执行exe #helloworld //运行exe
数据加载中……
采用HttpServlet 实现web文件下载
package com.TopWisdom.framework.web;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import com.TopWisdom.framework.util.*;

/**
 * <p>Title: tomcat 5.59文件下载</p>
 * <p>Description: 困惑我与我的项目组很久的web文件下载,今天终于解决了,借此也奉献给与我一样的困惑的朋友</p>
 * <p>Copyright: 拓智软件 版权所有</p>
 * <p>Company: 拓智软件(TopWisdom)</p>
 * 
@author 李光明
 * 
@version 1.0
 
*/

public class WebDownLoad extends HttpServlet {
    
public WebDownLoad() {
 }


 
private ServletConfig config;

 
public void init(ServletConfig config) throws ServletException {
  
super.init(config);
  
this.config = config;
 }


 
public void doPost(HttpServletRequest req,HttpServletResponse res) throws ServletException {
  doGet(req,res);
 }

 
//取得附件的名称
 public static String getAttachName(String file_name) {
  
if(file_name==nullreturn "";
  file_name 
= file_name.trim();
  
int iPos = 0;
  iPos 
= file_name.lastIndexOf("\\");
  
if(iPos>-1){
   file_name 
= file_name.substring(iPos+1);
  }

  iPos 
= file_name.lastIndexOf("/");
  
if(iPos>-1){
   file_name 
= file_name.substring(iPos+1);
  }

  iPos 
= file_name.lastIndexOf(File.separator);
  
if(iPos>-1){
   file_name 
= file_name.substring(iPos+1);
  }

  
return file_name;
 }

 
//UTF8转码
 public static String toUtf8String(String s) {
  StringBuffer sb 
= new StringBuffer();
  
for (int i=0;i<s.length();i++{
   
char c = s.charAt(i);
   
if (c >= 0 && c <= 255{
    sb.append(c);
   }
 else {
    
byte[] b;
    
try {
     b 
= Character.toString(c).getBytes("utf-8");
    }
 catch (Exception ex) {
     System.out.println(ex);
     b 
= new byte[0];
    }

    
for (int j = 0; j < b.length; j++{
     
int k = b[j];
     
if (k < 0) k += 256;
     sb.append(
"%" + Integer.toHexString(k).toUpperCase());
    }

   }

  }

  String s_utf8 
= sb.toString();
  sb.delete(
0,sb.length());
  sb.setLength(
0);
  sb 
= null;
  
return s_utf8;
 }

 
//取得下载文件的真实全路径名称
 private String getRealName(HttpServletRequest request,String file_name) {
  
if(request==null || file_name==nullreturn null;
  file_name 
= file_name.trim();
  
if(file_name.equals("")) return null;
  
  String file_path 
= request.getRealPath(file_name);
  
if ( file_path== nullreturn null;
  File file 
= new File(file_path);
  
if (!file.exists()) return null;
  
return file_path;
 }

 
//实现下载
 public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException {
  String file_name 
= request.getParameter("file_name");
  
if(file_name==null) file_name = "";
  file_name 
= file_name.trim();
  
  InputStream inStream
= null;
  String attch_name 
= "";
  
  
byte[] b  = new byte[100]; 
  
int    len= 0
  
try {
   
//取得附件的名称
   attch_name = getAttachName(file_name);
   
   file_name  
= getRealName(request,file_name);
   
if(file_name==null{
    System.out.println(
"文件不存在,或者禁止下载");
    
return ;
   }

   attch_name 
= toUtf8String(attch_name);
   
//读到流中
   inStream=new FileInputStream(file_name); 
   
//设置输出的格式 
   response.reset(); 
   response.setContentType(
"application/x-msdownload"); 
   
   
   response.addHeader(
"Content-Disposition","attachment; filename=\"" + attch_name + "\"");
   
//循环取出流中的数据 
   while((len=inStream.read(b)) >0{
    response.getOutputStream().write(b,
0,len); 
   }

   inStream.close(); 
  }
catch ( Exception e ){
   
if ( e instanceof java.io.FileNotFoundException ) {
    
try {
     response.sendRedirect(
"/tip/file_not_found.html");
    }

    
catch ( IOException ex ) {
     ex.printStackTrace(System.err);
    }

   }

   
else {
    e.printStackTrace(System.err);
   }

  }

 }

 

}



作者Blog:http://blog.csdn.net/gmlee2004/

posted on 2005-11-24 10:47 bluesky 阅读(344) 评论(0)  编辑  收藏 所属分类: 工作总结


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问