Jag har ett problem när jag länkar till word-dokument på vårat intranät. Hej, Jag gjorde en asp.sida efter ett exempel jag såg på nätet. Det kan var lite farligt att skriva så, efterssom du ger möjlighete att ladda ner valfri fil från servern där IUSER_datornamn har rättigheter att läsa. Ja, eller alternativt lägga in filbegränsningar i asp sidan.Öppna word-dokument.
Istället för att dokumentet öppnas i word så öppnas "word i internet explorer".
Någon som har något tips på hur jag ska göra för att öppna på "rätt sätt".
//JohanSv: Öppna word-dokument.
Det enda sätt jag vet är detta:
<code>
Response.ContentType = "application/x-msdownload"
Response.AddHeader "Content-Disposition", "attachment; filename=" & dittFilnamn
</code>
På så sätt "tvingar" du att dokumentet skall öppnas i rätt applikation.
Enda nackdelen med detta är att man får en dialogruta som frågar om man vill öppna eller spara filen först.
Jag vet dock inget sätt att komma runt(enkelt sätt alltså) dialogrutan.
/JockeSv: Öppna word-dokument.
Det fungerar, var det enda sätt jag kunde lösa det på.
Kallade asp-sidan openofficedoc
Sedan kallar jag på sidan med en querystring som pekar på ett officedoc
ex: openofficedoc.asp?doc=<%=Server.MapPath(".")%>\documentet.doc
Koden i asp filen ser sedan ut så här
<%
option explicit
Const ForReading = 1
Const TristateTrue = -1 'Unicode
Const FILE_TRANSFER_SIZE = 16384 '16k
Dim objFso, objFile, objStream
Dim doc
Dim srv
Dim char
Dim sent
Response.Buffer = True
doc = Request.QueryString("doc")
srv = Server.MapPath(".")&"\"
Set objFso = Server.CreateObject("Scripting.FileSystemObject")
If not objFso.FileExists(doc) THEN
Response.Write "Fanns inte"
Response.End
Else
Set objFile = objFso.GetFile(doc)
response.addHeader "Cache-control", "private"
response.addHeader "Content-Type", "application/octet-stream"
'Response.ContentType = "application/octet-stream"
response.addHeader "Content-Disposition", "attachment;filename="&objFile.name
response.addHeader "Content-Length", objFile.size
response.addHeader "Content-transfer-encoding", "binary"
Set objStream = objFile.OpenAsTextStream(ForReading, TristateTrue)
Do While Not objStream.AtEndOfStream
char = objStream.Read(1)
Response.BinaryWrite(char)
sent = sent + 1
If (sent MOD FILE_TRANSFER_SIZE) = 0 Then
Response.Flush
If Not Response.IsClientConnected Then
TransferFile = False
Exit Do
End If
End If
Loop
Response.Flush
objStream.Close
Set objStream = Nothing
Set objFso = Nothing
End if
%>Sv: Öppna word-dokument.
Jag skulle begrännsa det till en katalog. Katalogen bör inte innehålla några asp filer. Utan bara dokument.
Exempel:
<code>
<%
Option Explicit
Const ForReading = 1
Const TristateTrue = -1 'Unicode
Const FILE_TRANSFER_SIZE = 16384 '16k
Dim objFso
Dim objFile
Dim objFolder
Dim objStream
Dim Path
Dim FileName
Dim Buffer
Response.Buffer = True
Response.Clear
Path = Server.MapPath("docs") 'Mapp där filerna ligger
FileName = Request.QueryString("FileName")
Set objFso = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(path)
For Each objFile In objFolder.Files
If objFile.Name = FileName Then
Exit For
End If
Next
If objFile Is Nothing Then
Response.Write "Fanns inte"
Else
Response.addHeader "Cache-control", "private"
Response.addHeader "Content-Type", "application/octet-stream"
Response.addHeader "Content-Disposition", "attachment; filename=filename=" & objFile.Name & ";"
Response.addHeader "Content-Length", objFile.size
Response.addHeader "Content-transfer-encoding", "binary"
Set objStream = objFile.OpenAsTextStream(ForReading, TristateTrue)
Do While Response.IsClientConnected And Not objStream.AtEndOfStream
Buffer = objStream.Read(FILE_TRANSFER_SIZE)
Response.BinaryWrite(Buffer)
Response.Flush
Loop
objStream.Close
Set objStream = Nothing
Set objFso = Nothing
End If
Response.End
%>
</code>Sv: Öppna word-dokument.
Ex
IF right(doc,3) <> "doc" THEN
Response.Write "Otillåten fil"
Response.End
END IF