新しいウィンドウ/タブに.PDFを表示する代わりに、ユーザーのダウンロードマネージャーに.PDFのダウンロードを開始させる方法はありますか?
<a>
タグ内でdownload属性を使用します
<a href="content/file.pdf" download > pdf link </a>
<a href="content/file.doc" download > doc link </a>
HttpResponseヘッダーにContent-Dispositionを設定します。
Content-Disposition = 'attachment; filename=filename.pdf'
これはサーバー側で行う必要があります。クライアント側でこれを行うことはできません。
その方法は、問題のサーバー側の言語によって異なります。
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を使用する場合も同様のアプローチがあります。
IISの場合:
強制的にダウンロードするすべてのファイルを独自のフォルダーに入れます。
次に、IISでそのフォルダーに移動し、[HTTP応答ヘッダー]をダブルクリックします。
次の情報を含む新しいヘッダーを追加します。
名前:content-disposition
値:添付ファイル
そのフォルダー内のすべてのファイルにアクセスすると、適切なブラウザーのダイアログボックスとして保存するように求められます。
HTTPヘッダー(Content-disposition
) これを行うためには。クライアント側でこれを行うことはできません。
<?php
header('Content-disposition: attachment; filename=filename.pdf');
header('Content-type: application/pdf');
readfile('path/to/filename.pdf');
.htaccessソリューション:
AddType application/octet-stream .pdf
はい、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
インターネットにある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>
<?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;