l'ajout de l'en-tête de réponse http dans une action à l'intérieur d'un contrôleur dans la asp.net/mvc
Je suis de flux de données à partir du serveur vers le client pour le téléchargement à l'aide de filestream.write
. Dans ce cas, ce qui se passe, c'est que je suis en mesure de télécharger le fichier mais il ne semble pas que télécharger dans mon navigateur. Ni le pop-up pour "Enregistrer sous" s'affiche pas "Barre de chargement" s'affiche dans la section Téléchargements. En regardant autour de moi, je suppose que j'ai besoin d'inclure le "quelque chose" dans l'en-tête de réponse pour indiquer au navigateur qu'il s'agit d'une annexe à cette réponse. Je tiens également à définir le cookie. Pour ce faire, c'est ce que je fais:
[HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=" & name)]
public ActionResult Download(string name)
{
//some more code to get data in inputstream.
using (FileStream fs = System.IO.File.OpenWrite(TargetFile))
{
byte[] buffer = new byte[SegmentSize];
int bytesRead;
while ((bytesRead = inputStream.Read(buffer, 0, SegmentSize)) > 0)
{
fs.WriteAsync(buffer, 0, bytesRead);
}
}
}
return RedirectToAction("Index");
}
J'obtiens l'erreur: "le Système de.web.httpcontext.actuelle est la propriété et est utilisé comme un type."
Je fais l'en-tête de mise à jour à la bonne place? Est-il un autre moyen pour ce faire?
OriginalL'auteur ezile | 2013-04-18
Vous devez vous connecter pour publier un commentaire.
Oui, Vous faites de la mauvaise façon d'essayer ceci, vous devez ajouter l'en-tête à l'intérieur de votre action non pas comme un attribut de l'en-tête de votre méthode.
ou
Mise à jour
Comme je vous comprends de faire un appel ajax de votre contrôleur/action qui ne fonctionnent pas pour le téléchargement de fichier par l'appel direct d'une action. Vous pouvez obtenir de cette façon.
ou
Dans votre JS clic de bouton, vous pouvez simplement faire quelque chose de semblable à cela.
Cela fonctionne pour moi, et je vois la vue html arriver téléchargé dans mon cas de test. Pour vous, il pourrait être parce que vous êtes Rediriger à l'Action. Je n'ai pas essayé ce scénario. Juste essayer de placer cet en-tête, en vertu de l'Index, juste pour essayer.
Je vais détailler un peu plus. Je suis à "l'Index" à la page et clique sur Télécharger qui appelle alors Téléchargez l'action à l'aide de JavaScript. Le code ci-dessus est écrit en Télécharger d'action. Et après la diffusion du fichier à l'utilisateur, je me rediriger vers la page d'Index. Je suis confus quant à quand devrais-je dire au navigateur qu'il y est un téléchargement. Je veux dire que je suis l'envoi de la substance à l'aide de FileStream.WriteSync, donc je suppose que j'ai besoin de raconter navigateur avant d'envoyer le fichier qu'il y a une pièce jointe et donc il sera pop-up "enregistrer sous" boîte de dialogue. Je pense que je suis confus dans le flux de travail ici, et donc ne pas quand et où dois-je faire le changement.
Ok obtenu votre point.. SI vous voulez initite télécharger et peu importe ce que vous voulez rediriger vers votre nouvelle page de droite.
Vous avez dit que vous dirigez à l'action à l'aide de javascript, utilisez-vous la xhr demande, requête ajax ot juste l'emplacement.href?
OriginalL'auteur PSL
Veuillez jeter un oeil ici.
Qui suit est tiré du site référencé.
Edit 1:
L'ajout de quelque chose qui pourrait être plus de votre intérêt de notre bon vieux'.
Vous pouvez le vérifier détail ici.
OriginalL'auteur Abhinav
Changement:
:
Et déplacer l'instruction de retour à l'intérieur à l'aide de votre déclaration.
OriginalL'auteur Mathijs Flietstra
Dans le passé, j'ai construit une liste blanche pour permettre à certains domaines d'iframe mon site. Souvenez-vous de Google image cache utilisé pour iframe sites.
OriginalL'auteur Wayne
OriginalL'auteur akash singla