一个很牛的问题(估计没有人能解决)

时间:2021-04-19 21:55:37
我做了一个文件上传系统,将word文件或excel文件放在网站以外的文件夹中(安全性考虑),把文件标题存在数据库中,现在我要显示这个文件,点击文件标题后想让用户直接打开这个word 文件。我的标题连接到一个asp文件或jsp文件,在这个文件中得到word文件的路径。在以文件流的形式读出来。现在浏览器总是提示是否下载或打开,将不在询问对话框钩住也无用。有些版本浏览器还会报错,将打开word文件的地址变为asp文件或jsp文件.有无方法使打开word文件时浏览器不在询问

14 个解决方案

#1


那你就别问了

#2


没试过,猜想:如果你的.doc文件没图的话,你用
<objecet>把写字板或word本身集成上来
我想你本身用的是<a href="../../…….doc">自然会提示下载或
是否打开了

#3


gogogo

#4


没有必要用两个文件,也没有必要用什么二进制流把文件读出来,因为你是把word文件直接存你的文件夹中的,而不是存在数据库中的,你知道了文件名和路径,直接在第一个文件中用<a href="../../…….doc" arget="_blank">链接文字</a>即可,当用户单击该链接时,会自动在另一个窗口中打开该word文档的,浏览器不会提示你的,除非你浏览网页的机子上没有装Word,如果装了Word,系统会自动在浏览器中用Word打开,不会提问你是打开还是下载。要吗,就是你的机子有问题。关于这个东西,我前不久还用过,Excel也可以直接在浏览器里打开。

#5


你也可以找一个不是上传的word文档,是你本机上原有的文档,然后用<a href="../../…….doc" arget="_blank">链接文字</a>试一下,如果没有问题就说明你上传的文档有问题,如果不行,就说明你用二进制流读取的过程有问题,或者是你的机子有问题。不然的话用上面的方法一定行的。

#6


干吗在呢?微软在9x时代就有的web文件夹这种概念了,也支持远程读写,当然也不会弹什么东东拉,我的解决方案就是服务器端开启webdav功能,在客户端用js调用word远程读写就可以

#7


小天你很搞笑,直接连接word文件当然可以打开,问题是我连了一个asp文件就无法直接打开了。

#8


楼主有RPWT!!

#9


在安全存储方面:
其实这是一个做WEB文档系统及OA系统需要解决的基本问题!

至于下载及打开:
这是响应客户端请求的方法问题(header)

我觉得这都是基本的!! 如果讲个很难,我个人认为只是你的整体解决方案做得不够好!



#10


这个"问题"对我来讲不是问题,只是偶懒得打字帖代码,想交流可以留言

#11


没啥可研究的。因为我做望站用不上

#12


哈哈,链接asp文件,然后在你链接的asp文件中用response输出进制流也是可以的。我给你贴一段不全的asp.net代码吧,不过我的可是直接存在数据库中的word和excel文档啊,呵呵。
<% @page Language="VB" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.IO" %>
<% 
        Dim stream As StreamReader
        Dim connstr As String
        connstr = Server.MapPath("bin\conn.ini")
        stream = File.OpenText(connstr)
        connstr = stream.ReadLine()

        Dim conn As New SqlConnection(connstr)
        Dim sqlstr As String = "select * from upload_binary where id=" & Request("id")
        conn.Open()
        Dim mydataAdapter As New SqlDataAdapter(sqlstr, conn)
        Dim mytable As DataTable = New DataTable()
        mydataAdapter.Fill(mytable)

        Response.Clear()        
        Response.ContentType = mytable.Rows(0).Item("file_type")  'ile_type存的是文档类型,如:“application/msword”“application/vnd.ms-excel”“application/octet-stream”
        Response.BinaryWrite(mytable.Rows(0).Item("file_content")) 'file_content为文档的内容。
        Response.End()
%>
这是一个被链的页面,文件名为download_bin.aspx。
asp是一样,大同小异。上面的代码可以直接在浏览器中打开,不会问你是下载还是打开。

#13


关注中,给点分吧!

#14


我前不久也是这样做,在浏览器打开时可以编辑的,在它上面乱点一下,关闭时问要保存吗,可以去北大的网站去看下有这方面的内容,

#1


那你就别问了

#2


没试过,猜想:如果你的.doc文件没图的话,你用
<objecet>把写字板或word本身集成上来
我想你本身用的是<a href="../../…….doc">自然会提示下载或
是否打开了

#3


gogogo

#4


没有必要用两个文件,也没有必要用什么二进制流把文件读出来,因为你是把word文件直接存你的文件夹中的,而不是存在数据库中的,你知道了文件名和路径,直接在第一个文件中用<a href="../../…….doc" arget="_blank">链接文字</a>即可,当用户单击该链接时,会自动在另一个窗口中打开该word文档的,浏览器不会提示你的,除非你浏览网页的机子上没有装Word,如果装了Word,系统会自动在浏览器中用Word打开,不会提问你是打开还是下载。要吗,就是你的机子有问题。关于这个东西,我前不久还用过,Excel也可以直接在浏览器里打开。

#5


你也可以找一个不是上传的word文档,是你本机上原有的文档,然后用<a href="../../…….doc" arget="_blank">链接文字</a>试一下,如果没有问题就说明你上传的文档有问题,如果不行,就说明你用二进制流读取的过程有问题,或者是你的机子有问题。不然的话用上面的方法一定行的。

#6


干吗在呢?微软在9x时代就有的web文件夹这种概念了,也支持远程读写,当然也不会弹什么东东拉,我的解决方案就是服务器端开启webdav功能,在客户端用js调用word远程读写就可以

#7


小天你很搞笑,直接连接word文件当然可以打开,问题是我连了一个asp文件就无法直接打开了。

#8


楼主有RPWT!!

#9


在安全存储方面:
其实这是一个做WEB文档系统及OA系统需要解决的基本问题!

至于下载及打开:
这是响应客户端请求的方法问题(header)

我觉得这都是基本的!! 如果讲个很难,我个人认为只是你的整体解决方案做得不够好!



#10


这个"问题"对我来讲不是问题,只是偶懒得打字帖代码,想交流可以留言

#11


没啥可研究的。因为我做望站用不上

#12


哈哈,链接asp文件,然后在你链接的asp文件中用response输出进制流也是可以的。我给你贴一段不全的asp.net代码吧,不过我的可是直接存在数据库中的word和excel文档啊,呵呵。
<% @page Language="VB" %>
<%@ import Namespace="System.Data.SqlClient" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.IO" %>
<% 
        Dim stream As StreamReader
        Dim connstr As String
        connstr = Server.MapPath("bin\conn.ini")
        stream = File.OpenText(connstr)
        connstr = stream.ReadLine()

        Dim conn As New SqlConnection(connstr)
        Dim sqlstr As String = "select * from upload_binary where id=" & Request("id")
        conn.Open()
        Dim mydataAdapter As New SqlDataAdapter(sqlstr, conn)
        Dim mytable As DataTable = New DataTable()
        mydataAdapter.Fill(mytable)

        Response.Clear()        
        Response.ContentType = mytable.Rows(0).Item("file_type")  'ile_type存的是文档类型,如:“application/msword”“application/vnd.ms-excel”“application/octet-stream”
        Response.BinaryWrite(mytable.Rows(0).Item("file_content")) 'file_content为文档的内容。
        Response.End()
%>
这是一个被链的页面,文件名为download_bin.aspx。
asp是一样,大同小异。上面的代码可以直接在浏览器中打开,不会问你是下载还是打开。

#13


关注中,给点分吧!

#14


我前不久也是这样做,在浏览器打开时可以编辑的,在它上面乱点一下,关闭时问要保存吗,可以去北大的网站去看下有这方面的内容,