2016-02-25 13 views
9

Ich habe eine Anwendung, die einige statische Dateien zum Download zeigt. Diese Anwendung erstellt einen versteckten Iframe und legt die Quelle für die Datei-URL fest.Wie kann ich eine Datei in einer TaskPane App ohne window.open() herunterladen?

Der Browser zeigt einen Speichern-als-Dialog.

Aber in Microsoft Office gibt es keinen Speichern-als-Dialog und der FileDownload wird nicht gestartet.

Die Datei wird mit Content-Disposition: Attachment geliefert. Die Arbeitslösung öffnet einfach eine neue Browser-Instanz und löst den Download der Datei aus. Ich möchte kein neues Fenster öffnen, das den Fokus gewinnen wird.

<!DOCTYPE html> 
<html> 
    <head> 
     <script> 
      function di(){ 
       document.getElementById("d").src="blob.dat"; 
      } 
     </script> 
     <title>download</title> 
    </head> 
    <body> 
     <h1>file loading</h1> 
     <h2>works</h2> 
     <p>But opens a new window</p> 
     <a href="blob.dat" target="_blank"> a blank </a><br> 
     <a href="blob.dat" target="download"> named frame </a> 
     <h2>won't work</h2> 
     <a href="blob.dat"> a self </a><br> 
     <a href="blob.dat" target="_self"> a self </a><br> 
     <a href="blob.dat" target="_top"> a top </a><br> 
     <a href="#" onclick="di();"> iframe </a><br><br> 
     <iframe id="d"></iframe> 
    </body> 
</html> 

Ich denke, es ist ein seriöser Fehler, wenn eine Webanwendung Links nicht folgen kann.

Antwort

0
<script language="javascript"> 
function OpenADocument(strDoc) 
{ 

     document.blob.hidFLID.value=strDoc; 
     document.blob.action = "OpenLinksDocument.asp"; 
     document.blob.method="post" 
     document.blob.submit(); 
} 
</script> 

---- ASP-Code ----

Private Sub DownloadFile(file, MainFileName) 
    '--declare variables 
    Dim strAbsFile 
    Dim strFileExtension 
    Dim objFSO 
    Dim objFile 
    Dim objStream, FileNM 
    strAbsFile = Server.MapPath(file) 
    Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 
    If objFSO.FileExists(strAbsFile) Then 
     Set objFile = objFSO.GetFile(strAbsFile) 
     strFileExtension = LCase(objFSO.GetExtensionName(file)) 

     '-- first clear the response, and then set the appropriate headers 
     Response.Clear 

     '-- the filename you give it will be the one that is shown ' to the users by default when they save 

     dim NewFileName 
    NewFileName= "RandomFileNameYouWishtoGive" & Session.SessionID &"." &strFileExtension 

     Response.AddHeader "Content-Disposition", "attachment; filename=" & NewFileName 
     Response.AddHeader "Content-Length", objFile.Size 
     Response.ContentType = "application/octet-stream" 

     Set objStream = Server.CreateObject("ADODB.Stream") 
     objStream.Open 
     '-- set as binary 
     objStream.Type = 1 
     Response.CharSet = "UTF-8" 
     '-- load into the stream the file 
     objStream.LoadFromFile(strAbsFile) 
     '-- send the stream in the response 
     Response.BinaryWrite(objStream.Read) 
     objStream.Close 
     Set objStream = Nothing 
     Set objFile = Nothing 
    Else 'objFSO.FileExists(strAbsFile) 
     Response.Clear 
     Response.Write("No such file exists.") 
    End If 
    Set objFSO = Nothing 
End Sub 

Erläuterung:

1) auf Sie Seite Verknüpfen Sie Ihren Dateinamen nicht Tag in Anchor erwähnen,

2) Stattdessen einen verschlüsselten Code oder verschlüsselten Dateinamen selbst übergeben

3) Auf der Seite, wo Sie Dateinamen Mitteilung verfassen, Formularanfrage für Wert versteckte Datei-ID Do - hidFLID jetzt

4), dass die Dateinamen verwenden und diesen Dateinamen auf Antwort-Header hinzufügen.

5) Dies wird nicht zeigen Sie Ihre Actial Dateiname Code eingeben here`me/Dateipfad

6) Above Beispiel i angegeben haben, ist in der klassischen ASP, Wenn Sie Ihren Web erwähnen - Technologie, ich helfen kann Code in diesem Tech bereitstellen.