9

ダウンロード用の静的ファイルを表示するアプリケーションがあります。このアプリケーションは非表示の iframe を作成し、ソースを file-url に設定します。

ブラウザに名前を付けて保存ダイアログが表示されます。

しかし、Microsoft Office 内には名前を付けて保存ダイアログがなく、ファイルのダウンロードは開始されません。

ファイルは で提供され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>

Web アプリケーションがリンクをたどることができない場合、それは深刻なバグだと思います。

4

1 に答える 1

1
<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)あなたのリンクページで、アンカータグにあなたのファイル名を記載しないでください。

2) 代わりに、暗号化されたコードまたは暗号化されたファイル名自体を渡します

3) ファイル名を投稿しているページで、非表示のファイル ID - hidFLID のフォーム リクエストを実行します。

4) そのファイル名を使用し、そのファイル名を応答ヘッダーに追加します。

5) これはあなたの実際のファイル名を表示しません ここにコードを入力してください `me/File Path

6) 私が指定した上記の例は Classic ASP にあります。あなたの Web 技術に言及するなら、私はその Tech でコードを提供するのを助けるかもしれません。

于 2016-04-06T15:27:00.420 に答える