2016-02-25 41 views
9

Mam aplikację, która pokazuje niektóre pliki statyczne do pobrania. Ta aplikacja tworzy ukrytą ramkę iframe i ustawia źródło na adres URL pliku.Jak pobrać plik w aplikacji TaskPane bez użycia window.open()?

Przeglądarka wyświetla okno dialogowe Zapisz jako.

Ale w pakiecie Microsoft Office nie ma zapisanego okna dialogowego, a plik nie jest uruchamiany.

Plik jest obsługiwany z Content-Disposition: Attachment. Działające rozwiązanie po prostu otworzy nową instancję przeglądarki i uruchomi pobieranie pliku. Nie chcę otwierać nowego okna, które zyska ostrość.

<!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> 

Myślę, że jest to błąd serius, jeśli aplikacja WWW nie jest widoczna, aby podążać za linkami.

Odpowiedz

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> 

---- Kod ASP ----

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 

Objaśnienie:

1) Na połączysz stronę Nie wspominając nazwy pliku w tagu kotwicy,

2) zamiast tego należy podać kod zaszyfrowany lub samą nazwę zaszyfrowanego pliku

3) Na stronie, na której publikujesz nazwę pliku, wykonaj żądanie formularza na ukrytą wartość ID pliku - hidFLID

4) teraz użyj tej nazwy pliku i dodaj tę nazwę do nagłówka odpowiedzi.

5) To nie pokaże swoją Actial Nazwa pliku wprowadź kod here`me/Ścieżka

6 plików) Powyżej przykład mam określony jest w klasycznym ASP Jeśli wspomnieć Web - technologii, mogę pomóc podać kod w tym Tech.