none
.lnk zu einem Word Dokument öffnen RRS feed

  • Frage

  • Ich möchte über eine Webseite eine Verknüpfung zu einem Worddokument als Link anzeigen. Wenn einer auf dem link klickt, soll über die Verknüpfung (.lnk) das Word Dokument geöffnet werden.
    Wie stelle ich das am besten an? Die Verknüpfungsdatei liegt innerhalb der Website in einem Ordner.

    Montag, 14. September 2015 17:45

Antworten

  • Hallo Michael,

    das funktioniert so nicht. .lnk aus dem Internet ist nichts, was ein Browser direkt öffnet.

    Damit IIS die Datei überhaupt ausliefert, musst Du den MimeType für .lnk erst im IIS registrieren. Das geht über die web.config der Website:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <staticContent>
                <mimeMap fileExtension=".lnk" mimeType="application/octet-stream" />
            </staticContent>
        </system.webServer>
    </configuration>

    Wenn die Datei dann vom Browser angefordert wird,erscheint in der Regel ein "Speichern unter..." Dialog mit der Option, die Datei direkt zu öffnen. Falls man letzteres macht, wird die verknüpfte Datei (je nach Browser) dann geöffnet.

    Man kann zwar auch versuchen, einen Content-Disposition Header über einen Handler mitzugeben, der bei anderen Dateiarten teils dafür sorgt, dass die Datei inline im Browser geöffnet wird, bei .lnk Dateien scheint das aber nicht zu funktionieren.

    <%@ WebHandler Language="VB" Class="Downloader" %>
    
    Imports System
    Imports System.Web
    Imports System.IO
    
    Public Class Downloader : Implements IHttpHandler
        
        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    
        Dim FilePath As String = "X:\Ordner\Test.docx.lnk" 'context.Request.QueryString( "File" )
        Dim FileName As String = Path.GetFileName( FilePath )
        
            If File.Exists( FilePath ) Then
    
                context.Response.ContentType = "application/octet-stream"
                context.Response.AddHeader( "Content-Disposition", "inline;filename=" & FileName )
                context.Response.WriteFile( FilePath )
    
            End If
    
        End Sub
     
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
    
    End Class

    Ich frage mich allerdings, wohin die Verknüpfung zeigt? Auf eine lokale Datei auf dem Client?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 14. September 2015 20:47
    Moderator

Alle Antworten

  • Hallo Michael,

    das funktioniert so nicht. .lnk aus dem Internet ist nichts, was ein Browser direkt öffnet.

    Damit IIS die Datei überhaupt ausliefert, musst Du den MimeType für .lnk erst im IIS registrieren. Das geht über die web.config der Website:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
            <staticContent>
                <mimeMap fileExtension=".lnk" mimeType="application/octet-stream" />
            </staticContent>
        </system.webServer>
    </configuration>

    Wenn die Datei dann vom Browser angefordert wird,erscheint in der Regel ein "Speichern unter..." Dialog mit der Option, die Datei direkt zu öffnen. Falls man letzteres macht, wird die verknüpfte Datei (je nach Browser) dann geöffnet.

    Man kann zwar auch versuchen, einen Content-Disposition Header über einen Handler mitzugeben, der bei anderen Dateiarten teils dafür sorgt, dass die Datei inline im Browser geöffnet wird, bei .lnk Dateien scheint das aber nicht zu funktionieren.

    <%@ WebHandler Language="VB" Class="Downloader" %>
    
    Imports System
    Imports System.Web
    Imports System.IO
    
    Public Class Downloader : Implements IHttpHandler
        
        Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
    
        Dim FilePath As String = "X:\Ordner\Test.docx.lnk" 'context.Request.QueryString( "File" )
        Dim FileName As String = Path.GetFileName( FilePath )
        
            If File.Exists( FilePath ) Then
    
                context.Response.ContentType = "application/octet-stream"
                context.Response.AddHeader( "Content-Disposition", "inline;filename=" & FileName )
                context.Response.WriteFile( FilePath )
    
            End If
    
        End Sub
     
        Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
    
    End Class

    Ich frage mich allerdings, wohin die Verknüpfung zeigt? Auf eine lokale Datei auf dem Client?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 14. September 2015 20:47
    Moderator
  • Danke Stefan,

    <mimeMap fileExtension=".lnk" mimeType="application/octet-stream" />

    das wars was mir im IIS fehlte.

    Dienstag, 15. September 2015 16:48