PDF forcer le téléchargement par opposition à ouvrir dans le navigateur
-
21-12-2019 - |
Question
Je suis à l'aide de RazorPDF et je tiens à force de le télécharger au format PDF plutôt que d'ouvrir dans l'onglet du navigateur.Comment dois-je faire?Merci
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string Id)
{
return RedirectToAction("Pdf");
}
public PdfResult Pdf()
{
// With no Model and default view name. Pdf is always the default view name
return new PdfResult();
}
La solution
Essayez d'ajouter le content-disposition
l'en-tête avant de retourner l' PDFResult
objet.
public PdfResult Pdf()
{
Response.AddHeader("content-disposition", "attachment; filename=YourSanitazedFileName.pdf");
// With no Model and default view name. Pdf is always the default view name
return new PdfResult();
}
Autres conseils
Vous devriez examiner l'en-tête de "disposition de contenu";Par exemple, réglage "Contenu-Disposition" à "Pièce jointe; FileName= nom_fichier.pdf" Demimera l'utilisateur (généralement) avec une boîte de dialogue "Enregistrer sous: FileName.pdf", plutôt que de l'ouvrir.Ceci, cependant, doit provenir de la demande qui fait le téléchargement, vous ne pouvez donc pas faire cela lors d'une redirection.Toutefois, ASP.NET offre une réponse.Transmitfile à cet effet.Par exemple (en supposant que vous n'utilisez pas MVC, qui a d'autres options préférées):
Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf");
Response.TransmitFile(filePath);
Response.End();
Si vous essayez d'ouvrir ensuite le fichier dans API Convertir le flux en bytesarray, puis remplissez le contenu
HttpResponseMessage result = null;
result = Request.CreateResponse(HttpStatusCode.OK);
FileStream stream = File.OpenRead(path);
byte[] fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();
result.Content = new ByteArrayContent(fileBytes);
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "FileName.pdf";