JSP文件下载的实现

<%@ page import="com.jstrd.htgl.common.Htglcommon" %>
<%@ page import="java.net.*" %>
<% 
    
String mineType = "text/plain";
    
    
String subject = request.getParameter("subject");
    
String name = new String(request.getParameter("name").getBytes("ISO8859-1"));
    
if( subject != null )
    {
        Htglcommon bigText 
= new Htglcommon();
        
byte[] bts = bigText.selectText(subject,name);
        
if( bts != null )
        {
            
String ext = bigText.docType;
            
if( ext != null )
            {
                mineType 
= "";
                
if"pdf".equalsIgnoreCase(ext))
                {
                    mineType 
= "application/pdf";
                }
                
else if"xls".equalsIgnoreCase(ext))
                {
                    mineType 
= "application/vnd.ms-excel";
                }
                
else if"doc".equalsIgnoreCase(ext))
                {
                    mineType 
= "application/msword";
                }
                
else if"gif".equalsIgnoreCase(ext))
                {
                    mineType 
= "image/gif";
                }
                
else if"jpg".equalsIgnoreCase(ext))
                {
                    mineType 
= "image/jpeg";
                }
                
else if"bmp".equalsIgnoreCase(ext))
                {
                    mineType 
= "image/x-bmp";
                }
                
else if"png".equalsIgnoreCase(ext))
                {
                    mineType 
= "image/png";
                }
                
else if"ppt".equalsIgnoreCase(ext))
                {
                    mineType 
= "application/vnd.ms-powerpoint";
                }
                
else if"txt".equalsIgnoreCase(ext))
                {
                    mineType 
= "text/plain";
                }
                
else if"zip".equalsIgnoreCase(ext))
                {
                    mineType 
= "application/zip";
                }
                
else if"rar".equalsIgnoreCase(ext))
                {
                    mineType 
= "application/zip";
                }
                
if( mineType.equals("") )
                {
                    mineType 
= application.getMimeType("temp." + ext);
                }
                response.reset();
                ServletOutputStream stream 
= response.getOutputStream();
                
//response.addHeader("Content-Disposition","attachment; filename="+ URLEncoder.encode(bigText.docName,"gb2312"));
                response.setContentType(mineType 
+ "; charset=gb2312");                
                stream.write(bts);
                stream.flush();
                stream.close();
                bts 
= null;
            }
        }
    }
    
%>

package com.jstrd.htgl.common;

import java.util.Calendar;
import java.util.GregorianCalendar;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.exp.dao.DBConnection;
import com.exp.dao.DBConnectionFactory;
import com.exp.dao.EXPSQLException;
import com.exp.dao.dialect.Dialect;
import com.exp.dao.dialect.OracleDialect;

public class Htglcommon {
    
    
public transient String docType = "";
    
public transient String docName = "";    
    
    
public Htglcommon() {    
    }


/**
     * 查询数据(正文)
     * 
     * 
@param subject
     *            数据对应主题
     * 
@return 如果数据不存在,则返回null
     * 
@throws EXPSQLException
     
*/

    
public byte[] selectText(String subject,String strName) throws EXPSQLException {
        DBConnection dbConnection 
= this.getDBConnection();
        Connection con 
= dbConnection.getConnection();
        PreparedStatement ps 
= null;
        ResultSet rs 
= null;
        String strString 
= "";
        
try {
            Dialect dialect 
= dbConnection.getDialect();
            
if (dialect instanceof OracleDialect) {
                ps 
= con.prepareStatement("select file_body,file_name from sys_file f,flow_inst s where f.flow_inid=s.flow_inid and f.file_name=s.doc_name and f.flow_inid=? and f.file_name=?");
                ps.setString(
1, subject);
                ps.setString(
2, strName);
                rs 
= ps.executeQuery();
                
if (rs.next()) {
                    
byte[] bts = rs.getBytes(1);
                    
//Blob blob = rs.getBytes(1);
                    strString = rs.getString(2);
                    
this.docName = strString;
                    
this.docType = strString.substring(strString.lastIndexOf(".")+1);
                    
//byte[] bts = blob.getBytes((long) 1, (int) blob.length());
                    rs.close();
                    ps.close();
                    
return bts;
                }

                rs.close();
                ps.close();
            }
 else {
                ps 
= con.prepareStatement("select file_body,file_name from sys_file f,flow_inst s where f.flow_inid=s.flow_inid and f.file_name=s.doc_name and f.flow_inid=? and f.file_name=?");
                ps.setString(
1, subject);
                ps.setString(
2, strName);
                rs 
= ps.executeQuery();
                
if (rs.next()) {
                    
byte[] bts = rs.getBytes(1);
                    strString 
= rs.getString(2);
                    
this.docName = strString;
                    
this.docType = strString.substring(strString.lastIndexOf(".")+1);
                    rs.close();
                    ps.close();
                    
return bts;
                }

                rs.close();
                ps.close();
            }

            
return null;
        }
 catch (SQLException sqlE) {
            
throw new EXPSQLException(sqlE);
        }
 finally {
            dbConnection.close();
        }

    }


    
protected DBConnection getDBConnection() throws EXPSQLException {
        
return DBConnectionFactory
                .createDBConnection(
"WorkFlow");
    }


}
posted @ 2007-02-09 17:53  blueKnight  Views(689)  Comments(0Edit  收藏  举报