ASP 里是这样做的, 不知JSP是否也可以这样:Response.AddHeader "Content-Disposition", "filename="+ rs.fields("FileName").value)
Response.ContentType="application/octet-stream"
Response.BinaryWrite rs.fields("FileCont").value

解决方案 »

  1.   

    ie版本是多少呢,如果是5.5以上可以用div标记试一试,利用浏览器内置的Word对象
      

  2.   

    很感谢楼上们的解答和关注
    首先我在数据库中存的是一个完整的word文件,用application/octet-stream会提示下载
    不用response.setContentType("application/msword"); 直接在ie中显示时
    出现乱码
    用response.setContentType("application/msword"); 可以很好的显示,但word内嵌ie
    不是我需要的,我需要的是在ie中直接显示所以还请大家继续讨论
      

  3.   

    不知道你要的"直接显示"是什么效果不启动OLE吗?那就没有Word帮你解析了,你只有在后台解析. 转换成HTML, 来保持Word的排版
      

  4.   

    现在问题主要就是在后台解析上
    如果不调用word来解析,通过流直接在ie上显示,就会出现乱码关键就是不知道在image字段中是以一个什么样的形式来存储一个完整的word文档的
    存进去的时候是按字节存的,为什么取的时候按字节取就会出现乱码(不调用word解析)?难道必须要设置response.setContentType("application/msword"); 调用word来解析?
      

  5.   

    利用浏览器内置的Word对象,然后再ie中显示
      

  6.   

    你看看这个页面test.htm,不利用word对象要解析.doc文件的内容很困难,你是用jsp吗,以前讨论过的处理word的办法也不太多,参考一下http://expert.csdn.net/Expert/topic/1369/1369408.xml?temp=.5521204<title>Word2Html</title>
    <script language="javascript">
    function convert2html(){
    html.value = word.innerHTML; 
    }
    </script><p>请在这里贴入WORD文件内容
    <div style="border:1 outset #ffffff; overflow:auto;width:80%;height:50%" id="word" contenteditable></div>
    <input type="button" value="转换成HTML" onclick="convert2html()"><br><p>
    <textarea cols="80" rows="10" id="html">
      

  7.   

    没那么简单:response.setContentType("application/msword"); 
    是告诉浏览器,这个文档的MIME是msword (这样一般浏览器就会自动调用该MIME类型登记的应用程序了),还是客户端要在后台解析:要使用VBAASP code like:<%
    set wordApp = Server.CreateObject("Word.Application")
    set wordDoc = Server.CreateObject("Word.Document")
    ...
    set resultHTMLstream = Server.CreateObject("ADODB.stream")wordDoc.SaveAs resultHTMLstream, "HTML"
    %>Java中我不会,不过相信Java可以调用ActiveX,道理一样
      

  8.   

    看了bjzhanghao(八进制) 提供的连接和wsj(骆驼) 提供的思路
    看来是要调用用activex来实现了
    连接中提供的方法用到了jacob包,谁知道在那可以下载?
    连接中是对一个硬盘上的doc文件作处理,可我的是存在数据库中,难道中间要多一步:生成一个doc文件在硬盘上,然后再调用activex进行处理?为什么直接以流的形式取不出来,或者取出来的是乱码?另外如果将数据库中的流图片保存到一个word文档中?呵呵,不知不觉提了这么多问题,我会另开贴给分的
    希望大家继续研究
    谢谢
      

  9.   

    java调用activex有点悬,但用javascript是可以的,类似这样:
    <object
       classid="clsid:4F90C80F-392A-420E-BFE8-BDDB9CAE81C5" name="control1" width=1 height=1 codebase="control1.cab"
    ></object>
    <script language=javascript>
    control1.File = "F:\\sample\\control1\\test.doc";
    if(!control1.OpenFile())
    alert("opendoc error");
    control1.LoadMacro("ActiveDocument.TrackRevisions=True\nMsgBox ActiveDocument.VBProject.VBComponents.Item(1).Name");
    </script>
      

  10.   

    up ..你们可以吧那么的QQ还是Email 留给我们这些菜鸟吗??拜托
      

  11.   

    关于调用activex的问题可以迟些讨论
    现在最急的是:如何将数据库中的流图片保存到一个word文档中?请高手出招
    :)
      

  12.   

    to zxhong:
        Word文档是通过COM对象显示其某些特性的。要从 Java 访问 COM 对象,首先必须使用 Microsoft 的 Java 虚拟机 (JVM) JView。但这太依赖Microsoft,所以最好用一种叫做java-com bridge的东西,JACOB允许任何JVM访问COM对象
    我用一个称之为majix的工具在jacob的基础上可以把word文档转变为xml
    XML文档存储的数据能导入数据库的
    我现在的理解,xml作为所有数据存储格式的中间桥梁,不管是数据库中的,word文档的,excel文档.
    这是别人提供的思路。期望能对你有帮助!
    另外我有个问题,想请教,望能相住:oracle中的图片如何在jsp中的指定位置显示。
       qq 4484945
      

  13.   

    非常感谢 ljliang(小溪) 
    oracle中的图片如何在jsp中的指定位置显示
    用一个table〈tr〉<td>固定一下就ok了
    <table>
    <tr>
    <td width="20%">
    <image src="../servlet/test?p=图片id" width="20" height="10">
    </td>
    </tr>
      

  14.   

    对不起,不用servlet,直接在jsp中些如下代码: 
    <%  
             InputStream in;
    in=rs.getBinaryStream("picture");
    response.reset();
    response.setContentType("image/gif");
    byte[] b=new byte[1024*1024];
    int len;
             while((len=in.read(b))>0)
        response.getOutputStream().write(b,0,len); 
    response.getOutputStream().flush();
            response.getOutputStream().close();
    %>
          <center><img src=<%=b%> width="5" height="6"></center>     出现问题:只显示了图片,而且也没有到指定位置,其他文字都没有显示。望相告!
      

  15.   

    在一个jsp文件中直接这么用肯定不行了
    试试用2个jsp文件来完成,一个是表格,一个是得到输出流
    最好还是用servlet,这本来就是它干的活
    有什么问题给我短信,不要在这个贴子上回复了有些问题我还要和大家讨论
    如何将数据库中的流图片保存到一个word文档中?
      

  16.   

    以下是利用微软的ADODB.Stream来读写流的我想在Java中用FileOutputStream是一样
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
    <TITLE></TITLE>
    </HEAD>
    <SCRIPT>
    function download(url)
    {
    alert('start download')
    var objHttp = new ActiveXObject("Microsoft.XMLHTTP");
    objHttp.Open("GET",url, false);
    objHttp.send();
    objStream = new ActiveXObject("ADODB.Stream");
    objStream.Type = 1
    //objStream.Charset = "ascii"
    objStream.Open()
    objStream.Write(objHttp.responseBody)
    objStream.SaveToFile("c:\\test.doc",2)
    //var appWord = new ActiveXObject("Word.Document");
    objStream.Close()
    alert("download complete: save to c:\\ " + url.replace(/(.*)\//,""))
    }
    </script>
    <BODY>
    <span style="cursor:hand;color:blue" onclick="download('http://localhost/test.doc')">click to download</span>
    <P>&nbsp;</P></BODY>
    </HTML>
      

  17.   

    看你的意思不一定要后台解析,
    前台解析可以用以下代码:
    如果要后台解析,逻辑上是一样的,

    http://expert.csdn.net/Expert/topic/1369/1369408.xml?temp=.5521204
    提到的
    import com.jacob.com.*;
    import com.jacob.activeX.*;
    修改一下就可以了
    <HTML>
    <HEAD>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
    <TITLE></TITLE>
    </HEAD>
    <SCRIPT>
    function download(url)
    {
    alert('start download')
    var objHttp = new ActiveXObject("Microsoft.XMLHTTP");
    objHttp.Open("GET",url, false);
    objHttp.send();
    var objStream = new ActiveXObject("ADODB.Stream");
    objStream.Type = 1
    objStream.Open()
    objStream.Write(objHttp.responseBody)
    objStream.SaveToFile("c:\\test.doc",2)
    objStream.Close()
    alert("download complete: save to c:\\ " + url.replace(/(.*)\//,"")+"\nTry to using Word to Save it as HTML")
    var oWordApp = new ActiveXObject("Word.Application");
    oWordApp.Visible = true;
    var oWordDoc = oWordApp.Documents.Add("C:\\test.doc");
    var rngCurrent = oWordDoc.Application.ActiveDocument.Content
    var tabCurrent = oWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,4,4)
    oWordDoc.Tables(1).Rows(1).Cells(1).Range.InsertAfter("cell1 content");
    oWordDoc.SaveAs("c:\\test.htm",8,1);
    oWordDoc.Close();
    objStreamHtml = new ActiveXObject("ADODB.Stream");
    objStreamHtml.Type = 2;
    objStreamHtml.Charset = "ascii"
    objStreamHtml.Open()
    objStreamHtml.LoadFromFile("c:\\test.htm")
    alert("SaveAs HTML complete: save to c:\\test.htm")
    var strHTML = objStreamHtml.ReadText(-1);
    objStreamHtml.Close()
    document.write (strHTML);
    }
    </script>
    <BODY>
    <span style="cursor:hand;color:blue" onclick="download('http://localhost/test.doc')">click to download</span>
    <P>&nbsp;</P></BODY>
    </HTML>
      

  18.   

    非常感谢 wsj(骆驼) ,你提供的这个代码,效果不错
    test.htm里有字符cell1 content
    我怎么将test.doc里的内容保存到test.htm文件里呢?而不是cell1 content?
      

  19.   

    to:wsj(骆驼) 
    我怎么将test.doc里的内容保存到test.htm文件里呢?而不是cell1 content?
    to:everybody
    如何将数据库中的流图片保存到一个word文档中?
      

  20.   

    oWordDoc.Tables(1).Rows(1).Cells(1).Range.InsertAfter("cell1 content");
    这一行是我的测试语句(利用次类方法可以修改添加word内容)
    注释掉就可以了
      

  21.   

    >如何将数据库中的流图片保存到一个word文档中?找遍了VBA, 没有发现Word.Document有从一个流里load document的能力
    哎,M$就是太关注应用(直接内含了读文件流,不需要用户输入流对象,只要一个文件名),架构和模式和Java差远了
      

  22.   

    //var rngCurrent = oWordDoc.Application.ActiveDocument.Content
    //var tabCurrent = oWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,4,4)
    //oWordDoc.Tables(1).Rows(1).Cells(1).Range.InsertAfter("cell1 content");
      

  23.   

    非常感谢 wsj(骆驼) 一直关注此贴
    基本上可以了
    但word中如果有中文,该中文显示在html中就是乱码
    不知道能否解决?
      

  24.   

    中文问题已解决
    在运行过程中会弹出“调用acticex不安全”
    能不能不让弹出该对话框?