web-dev-qa-db-ja.com

PDFのダウンロードを自動的に強制する方法は?

新しいウィンドウ/タブに.PDFを表示する代わりに、ユーザーのダウンロードマネージャーに.PDFのダウンロードを開始させる方法はありますか?

36
Heinrich

<a>タグ内でdownload属性を使用します

<a href="content/file.pdf" download > pdf link </a>
<a href="content/file.doc" download > doc link </a>

35
Abouasy

HttpResponseヘッダーにContent-Dispositionを設定します。

Content-Disposition = 'attachment; filename=filename.pdf'
31
Bird

これはサーバー側で行う必要があります。クライアント側でこれを行うことはできません。

その方法は、問題のサーバー側の言語によって異なります。

PHP:

header('Content-Disposition: attachment; filename="' . $filename . '"');

Java:

response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

。ネット:

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

PDFファイルをストリーミングするサーバー側コードの手段がない場合は、Webサーバーレベルで設定する必要があります。たとえば、Apache HTTPDでは、.htaccessファイルをPDF次のエントリを持つフォルダーのルート:

<Files *.pdf>
    Header set Content-Disposition attachment
</Files>

または、httpd.confファイルでグローバルに設定します。 web.configファイルでIISを使用する場合も同様のアプローチがあります。

14
BalusC

IISの場合:

強制的にダウンロードするすべてのファイルを独自のフォルダーに入れます。

次に、IISでそのフォルダーに移動し、[HTTP応答ヘッダー]をダブルクリックします。

次の情報を含む新しいヘッダーを追加します。

名前:content-disposition

値:添付ファイル

そのフォルダー内のすべてのファイルにアクセスすると、適切なブラウザーのダイアログボックスとして保存するように求められます。

8
Justin Emlay

HTTPヘッダー(Content-disposition ) これを行うためには。クライアント側でこれを行うことはできません。

4
Jacob Relkin
<?php
header('Content-disposition: attachment; filename=filename.pdf');
header('Content-type: application/pdf');
readfile('path/to/filename.pdf');
3
jarnesjo

.htaccessソリューション:

AddType application/octet-stream .pdf
2
Alex

はい、JSPページで行うことができます...新しいスクリプトページに移動する1つのJSPページにダウンロードリンクを指定することにより、次のようにPDFファイルをダウンロードします

DownloadPage.JSPコード:-

<a href='downloadPdf.jsp?file=FILE.pdf' >Download PDF File</a>

downloadPdf.JSPコード:-

<%@ page import="Java.util.*,Java.io.*"%>               

<%

  File f = new File ("E:/PDFfiles/Downloads/" + request.getParameter("file") );
  response.setContentType ("application/pdf");
  response.setHeader ("Content-Disposition", "attachment; filename=""+request.getParameter("file")+""");
  String name = f.getName().substring(f.getName().lastIndexOf("/") + 1,f.getName().length());
  InputStream in = new FileInputStream(f);
  ServletOutputStream outs = response.getOutputStream();


  int bit = 256;
  int i = 0;
  try {
  while ((bit) >= 0) {
  bit = in.read();
  outs.write(bit);
                     }
       } 
        catch (IOException ioe) {
                ioe.printStackTrace(System.out);
            }
   outs.flush();
   outs.close();
   in.close();   
 %>

ソース: http://bloggerplugnplay.blogspot.in/2012/05/how-to-create-force-download-link-for.html

2
Code Spy

インターネットにあるvb aspネットコードから、この単純なc#download.aspxページを作成しました。 「f」クエリ文字列パラメータとして渡されたファイルURLで使用できます。 (/folder/download.aspx?f=/folder1/example.pdf)。

<!DOCTYPE html>
<html>
<head><title></title>
<script runat="server">
    void Page_Load(object sender, EventArgs e)
    {

        String strRequest = "";
        try
        {
            strRequest = Request.QueryString["f"].ToString();
        }
        catch
        { }

        if (strRequest.Length > 0)
        {
            String path = Server.MapPath(strRequest);
            System.IO.FileInfo File = new System.IO.FileInfo(path);
            if (File.Exists)
            {
                Response.Clear();
                Response.AddHeader("Content-Disposition", "attachment; filename=" + File.Name);
                Response.AddHeader("Content-Length", File.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(File.FullName);
                Response.End();
            };
        }
    }
</script>
</head>
<body></body>
</html>
0
Leonardo Danza
    <?php
    // required for IE, otherwise Content-disposition is ignored   
     if(ini_get('zlib.output_compression'))
      ini_set('zlib.output_compression', 'Off');
    }
$reader = fopen($filename, "r");
$contents = fread($reader, filesize($filename));
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($filename));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    ob_end_clean();
    echo $contents;
0
Levi Hackwith