其实我想实现的是这样一个东西,用户在客户端将编辑好的一个文件(或者提供在线编辑功能也好),比如一个doc文件,或是一个mht文件,因为这种文件里可以同时保存图片和文字,上传到服务器后需要将文件存入数据库的一个blob字段里,用户浏览的时候调用一个servlet将这个文件从数据库里取出来,浏览需要是以超文本的方式浏览。现在的问题是如果采用doc的话浏览会有问题,如果是mht文件,浏览的时候好像受ie版本的限制,有些高版本的ie可以显示出来,低版本就不行。另外,将文件直接以流的方式输出的话,如果文件里有图片是不是就会显示不出来?如何实现请大家给点思路吧,很着急很着急!谢谢!

解决方案 »

  1.   

    在jsp页面上生成word文档只需把contentType=”text/html”改为contentType="application/msword; charset=gb2312"即可,代码如下:
    <%@ page contentType="application/msword; charset=gb2312" %>
    通过设置可以使原来页面的内容在word中表现出来。
    如果需要把word文档下载下来,只需在jsp页面上面加上如下代码:
    <%response.setHeader("Content-Disposition", "attachment;filename=filename.doc");%>
    其中filename.doc中filename是要下载的word文档的文件名,可以通过<%=docName%>来自行定制,如下
    <%response.setHeader("Content-Disposition", "attachment;filename=<%=docName%>.doc");
    %>在client输出oracle中BLOB字段中的word文档实体。其中调用了类getBlobBean,该类提供了从oracle中取出blob功能,代码如下:
    package yourpackage;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import oracle.sql.*;
    import beans.yourbeanpackage. getBlobBean;
    public class GetBlobServlet1 extends HttpServlet {
    //设置输出内容类型,这个设置很重要,否则客户端浏览器不能识别输出内容,导致弹出下载的对话框。
      private static final String CONTENT_TYPE = "application/msword;charset=gb2312";
      //Initialize global variables
      public void init() throws ServletException {}
      //Process the HTTP Get request
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType(CONTENT_TYPE);
        perform(request,response);
      }
      public void perform(HttpServletRequest request, HttpServletResponse response){
        try{
    //该类功能是从oracle哭中取出blob实体
          getBlobBean getBlob=new getBlobBean();
          OutputStream sos = response.getOutputStream();
          getBlob.connFunction();
         oracle.sql.BLOB blob=getBlob.getBlob("cehui");
        //输出word文档
         if(blob!=null){
            InputStream pi = blob.getBinaryStream();
            int blobsize =(int)blob.length();
            byte[] blobbytes = new byte[blobsize];
            int bytesRead = 0;
            while ((bytesRead = pi.read(blobbytes)) != -1) {
              sos.write(blobbytes, 0, bytesRead);
            }
            pi.close();
            sos.flush();
            sos.close();
          }
          getBlob.dropConnFunction();
        }catch(Exception e){
          System.out.println(e.toString());
        }
      }
      //Clean up resources
      public void destroy() {}
    }
      

  2.   

    非常感谢laughsmile(海边的星空) 的帮助,不过用word文件打开的话,用户还可以在上面进行随意的修改,只是不能提交而已,这样做是不太好的。不知道还有没有别的办法?