2016-02-25 3 views
9

У меня есть приложение, которое показывает некоторые статические файлы для загрузки. Это приложение создает скрытый iframe и устанавливает источник в файл-url.Как загрузить файл в приложении TaskPane без использования window.open()?

Браузер показывает диалог сохранения.

Но в Microsoft Office диалоговое окно save-as отсутствует, и filedownload не запускается.

Файл подается с Content-Disposition: Attachment. Рабочее решение просто откроет новый экземпляр браузера и запускает загрузку файла. Я не хочу открывать новое окно, которое будет фокусироваться.

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

Я думаю, что это ошибка serius, если веб-приложение несовместимо с целями.

ответ

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 код ----

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 

Объяснение:

1) On You Ссылка страницу Не упоминайте Ваше имя файла в Anchor теге,

2) вместо этого передайте зашифрованный код или зашифрованное имя самого файла

3) На странице где вы публикуете имя файла, Do Form Request for value hidden ID файла - hidFLID

4) теперь используйте это имя файла и добавьте это имя файла в заголовок ответа.

5) Это не будет показывать Actial Имени файла введите код Пути

6 here`me/файл) Приведенный выше примера я уточнил в классическом ASP, если вы упоминаете ваш Web - технологии, я могу помочь предоставить код в этом Tech.

Смежные вопросы