servlet实现从oracle数据库的blob字段中读出文件并显示

 

/*
 * ReadFile.java
 *
 * Created on 2004年11月17日, 下午3:41
 */

package jgwl.app;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import jgwl.base.DataBaseConnection;
import java.io.*;
import oracle.sql.*;

/**
 *
 * @author  Roy Chen 
 * @version
 */
public class ReadFile extends HttpServlet {
   
    /** Initializes the servlet.
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
       
    }
   
    /** Destroys the servlet.
     */
    public void destroy() {
       
    }
   
    /** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       
        byte[] buf=new byte[4096];
        try{
            Statement stmt=new DataBaseConnection().getStatement();
            ResultSet rs=stmt.executeQuery("select * from demo where id=23");
            response.reset();
            //response.setHeader("Content-Disposition", "attachement;filename=ss.doc;");
            //**如要浏览器直接另存为就不屏蔽上行,filename 为文件名
            response.setContentType("application/msword;charset=GBK");
            //**此处为文件的mime类型,可以在网上搜到,本例为word
            //application/vnd.ms-excel;charset=GBK  表示excel文件类型
           //application/vnd.pdf;charset=GBK           表示pdf文件类型

            ServletOutputStream out=response.getOutputStream();
           InputStream in;
           if(rs.next())
             in = blob.getBinaryStream();
            while(in.read(buf)!=-1){
                out.write(buf);
            }
           
            out.flush();
            out.close();
           //**以下为网上看到的写如文件的样例
           //==================
            // while(rs.next()) {
            //ServletOutputStream sout = response.getOutputStream();
            //InputStream in = rs.getBinaryStream(1);
            //byte b[] = new byte[0x7a120];
            //for(int i = in.read(b); i != -1;){
            // sout.write(b);
            //  in.read(b);
            // }
            // sout.flush();
            // sout.close();
            //}
           
            //====================
            //FileOutputStream file_out=new FileOutputStream("f:\\filename");
           
            //InputStream blob_in=blob.getBinaryStream();
            //int temp;
            // while((temp=blob_in.read())!=-1){
            // file_out.write(temp);}
            // blob_in.close();
            // file_out.close();
            //out.write(blob.getBinaryStream().);
            //out.flush();
            stmt.close();
        }catch (SQLException e){
            e.printStackTrace();
        }
        //PrintWriter out = response.getWriter();
        /* TODO output your page here
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet</title>");
        out.println("</head>");
        out.println("<body>");
        
        out.println("</body>");
        out.println("</html>");
         */
        //out.close();
    }
   
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
   
    /** Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
   
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
   
}

posted on 2005-08-16 12:05  轻松逍遥子  阅读(336)  评论(0编辑  收藏  举报