Écrire Outputstream dans une nouvelle fenêtre
Comment puis-je écrire un Outputstream dans une nouvelle fenêtre de navigateur?
Actuellement, j'ai le code ci-dessous. Évidemment, il ouvre le flux dans la même fenêtre. Je sais que je peux écrire le Outputstream dans un fichier et l'ouvrir dans une nouvelle fenêtre, mais ce n'est pas une option.
protected void openPDF(byte[] dados) {
HttpContext contexto = HttpContext.Current;
contexto.Response.Clear();
contexto.Response.AppendHeader("content-type", "application/pdf");
contexto.Response.AppendHeader("Expires","Mon, 26 Jul 1990 05:00:00 GMT");
contexto.Response.AppendHeader("Cache-Control","no-cache, must-revalidate");
contexto.Response.AppendHeader("Pragma","no-cache");
contexto.Response.Expires = -1;
contexto.Response.AppendHeader("Content-Disposition", "inline; filename=labels.pdf");
contexto.Response.AddHeader("content-length", dados.Length.ToString());
contexto.Response.OutputStream.Write(dados, 0, dados.Length);
contexto.Response.OutputStream.Flush();
contexto.Response.End();
}
Vous devez vous connecter pour publier un commentaire.
Le lien que demande le fichier doit préciser que vous souhaitez une nouvelle fenêtre de navigateur.
Une fois que la demande est envoyée au serveur, le serveur répond simplement avec le résultat de la mettre dans la fenêtre qui l'a demandé, sauf si vous avez spécifié une cible différente. Évidemment, un attachement qui invite pour le téléchargement, mais vous savez cela et que vous voulez éviter.
D'autres solutions serait d'écrire une réponse qui utilise du javascript pour ouvrir une nouvelle fenêtre et d'en effectuer la demande réelle pour obtenir les données. Si vous savez que vous voulez toujours dans une nouvelle fenêtre, je pense que changer le lien pour spécifier une nouvelle fenêtre est une meilleure solution.
Le serveur ne peut pas faire que seul...
Le serveur ne répond qu'aux demandes du client et le client affiche/utilise ces réponses comme il l'entend.
Vous auriez besoin de modifier le flux de l'application, sur le côté client, en ayant à la demande du client ce fichier PDF (ou autre contenu), dans une nouvelle fenêtre du navigateur. Cela peut être fait simplement, par exemple, si le fichier PDF est actuellement envoyée suite à l'utilisateur de cliquer sur un lien, par l'ajout d'une cible='some_window_name' attribut dans l'élément.
En d'autres termes, une fois que le serveur reçoit la requête, il est trop tard (*) pour modifier la "destination" pour la réponse. L'idée est donc d'avoir le client d'en faire la demande à partir de/pour la nouvelle fenêtre de navigateur.
(*) trop tard...
Eh bien... peut-être pas, quelqu'un peut trouver un moyen astucieux d'emballage de la réponse avec un peu de javascript enveloppe qui permettrait d'ouvrir une nouvelle fenêtre de navigateur, et en quelque sorte (?) le premier de son contenu avec le contenu du document PDF. Ou peut-être un autre truc... En tout cas ce serait probablement un peu artificiel... (contre seulement d'avoir le navigateur demande dans le bon contexte)
Est le fichier généré dans le cadre d'une publication? Si donc il est délicat; votre meilleure option pourrait être de modifier
Content-Disposition
àattachment
qui invite l'utilisateur à l'Ouvrir/Enregistrer la boîte de dialogue, au lieu d'afficher le fichier. Si non, en utilisanttarget="_blank"
dans le lien est la solution.où vous devez générer un fichier,vous pouvez utiliser ce code à l'ouverture d'un fichier dans une nouvelle fenêtre