Existe-t-il un moyen de forcer le gestionnaire de téléchargement de l'utilisateur à démarrer un téléchargement pour .PDF au lieu d'afficher le .PDF dans une nouvelle fenêtre/onglet?
utilisez l'attribut download à l'intérieur de votre balise <a>
<a href="content/file.pdf" download > pdf link </a>
<a href="content/file.doc" download > doc link </a>
Définissez Content-Disposition dans votre en-tête HttpResponse:
Content-Disposition = 'attachment; filename=filename.pdf'
Cela doit être fait côté serveur. Vous ne pouvez pas faire cela du côté client.
La procédure à suivre dépend de la langue du serveur en question.
PHP:
header('Content-Disposition: attachment; filename="' . $filename . '"');
Java:
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
.NET:
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
Si aucun code côté serveur ne diffuse le fichier PDF, vous devez le configurer au niveau du serveur Web. Dans Apache HTTPD, par exemple, vous pouvez placer/développer un fichier .htaccess
à la racine du dossier PDF avec l'entrée suivante:
<Files *.pdf>
Header set Content-Disposition attachment
</Files>
ou le configurer globalement dans le fichier httpd.conf
. Une approche similaire existe pour IIS avec le fichier web.config
.
Pour IIS:
Placez tous les fichiers que vous voulez forcer à télécharger dans leur propre dossier.
Ensuite, dans IIS, allez dans ce dossier et double-cliquez sur En-tête de réponse HTTP.
Ajouter un nouvel en-tête avec les informations suivantes:
Nom: Content-disposition
Valeur: Attachement
Tous les fichiers de ce dossier, lorsqu’ils sont utilisés, doivent afficher la boîte de dialogue Enregistrer sous pour le navigateur approprié.
Pour ce faire, vous devez envoyer des en-têtes HTTP (Content-disposition
). Vous ne pouvez pas faire cela du côté client.
<?php
header('Content-disposition: attachment; filename=filename.pdf');
header('Content-type: application/pdf');
readfile('path/to/filename.pdf');
.htaccess solution:
AddType application/octet-stream .pdf
Oui, cela peut être fait dans la page JSP ... En donnant un lien de téléchargement dans une page JSP sur laquelle va la nouvelle page de script ... et téléchargez le fichier PDF comme suit
Code de téléchargement.JSP: -
<a href='downloadPdf.jsp?file=FILE.pdf' >Download PDF File</a>
downloadPdf.JSP code: -
<%@ 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();
%>
Source: http://bloggerplugnplay.blogspot.in/2012/05/how-to-create-force-download-link-for.html
De vb asp net code trouvé sur Internet, j’ai créé cette simple page c.download.aspx. Vous pouvez l’utiliser avec l’URL du fichier passé en tant que paramètre "f" de chaîne de requête. (/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;