Les Alternatives à la Réponse.TransmitFile()
J'ai donc l'ensemble de code que j'ai joué avec depuis quelques jours, j'ai besoin de télécharger un fichier à partir du serveur vers le client. C'est la partie facile, mais j'ai aussi besoin de rafraîchir un affichage de la grille après c'est fini et afficher un message d'alerte que le fichier a été créé avec succès, mais chaque moyen que j'ai trouvé à télécharger contient une sélection de ligne de code qui sera ma chute.
Réponse.Fin()
Réponse.Close() ou
ApplicationInstance.CompleteRequest()
Tous ces fin de la réponse ou je crois en ApplicationInstance cas il bouffées de tous le code source de la page dans le fichier texte, je suis d'essayer de télécharger. Il est suivi par l'extrait de code que j'ai pour le téléchargement d'un fichier à partir du serveur, voici la source pour le téléchargement de mon fichier. Si vous avez quelque chose qui peut aider à résoudre cet interminable cauchemar, il serait grandement apprécié.
//I brought everything together in an arraylist to write to file.
asfinalLines = alLines.ToArray(typeof(string)) as string[];
string FilePath = HttpContext.Current.Server.MapPath("~/Temp/");
string FileName = "test.txt";
//Creates the file on server
File.WriteAllLines(FilePath + FileName, asfinalLines);
//Prompts user to save file
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath + FileName);
response.Flush();
//Deletes the file on server
File.Delete(FilePath + FileName);
response.Close();
OriginalL'auteur General Charismo | 2015-10-13
Vous devez vous connecter pour publier un commentaire.
Approche 1: à l'Aide d'un fichier temporaire
Si vous voulez simplement supprimer le fichier après le transfert de fichier ou d'effectuer d'autres opérations de nettoyage, vous pouvez le faire
Approche 2: Sans enregistrer le fichier sur le serveur
Si votre texte de données est faible, vous pouvez suivre l'autre (NE PAS utiliser cette approche pour les gros transferts de données), vous pouvez directement remettre le contexte en tant que fichier texte pour les clients, sans les enregistrer sur le serveur
PS: je suis un VB.NET personne, essayé de convertir le code ci-dessus en c# il peut avoir certains cas-troubles de la sensibilité, mais la logique est claire
Mise à JOUR:
Approche 3: l'Exécution de code avec transfert de fichier.
Il doit être gardé à l'esprit que vous ne pouvez pas avoir plusieurs réponses à une requête. Vous ne pouvez PAS mettre à jour votre page et de transmettre un fichier dans une seule et même réponse. Les en-têtes peut être définie qu'une seule fois par demande.
Dans ce cas, vous devez suivre cette méthode:
Cette approche ajoute une étape supplémentaire pour le téléchargement du fichier après la génération et ne prend pas en charge directe de transmission de données, c'est à dire sans l'enregistrer sur le serveur.
Le contenu du fichier dépend de votre ligne de code
asfinalLines = alLines.ToArray(typeof(string)) as string[];
. Vérifier le contenu de alLines, comment est-il généré. Vérifiez également les fichiers de text.txt, qui ne contient vos données réelles ou pas?En ce qui concerne l'exécution de code comme rafraîchissant gridview, l'affichage de message etc, vous avez besoin pour mettre en œuvre une autre approche, je vais mettre à jour ma réponse pour la troisième approche
Merci beaucoup pour l'aide! Comme pour le asfinalLines et alLines contenu, tous les il a les 14 lignes qui passait les conditions et le fichier d'origine. Mais après la transmission du fichier, il contient le code source de la page, je pourrais simplement essayer de démonter quoi que ce soit après le départ tag, mais j'espérais que je n'aurais pas à faire un travail autour de.
Vérifier La Méthode 3. Concernant votre problème de code source dans le fichier téléchargé, essayez d'autres alternatives comme le OutputStream.Écrire ou de Réponse.BinaryWrite etc. au lieu de TransmitFile ou même le plus strict de l'ancre de lien. Sinon, il est nécessaire de regarder dans le code où vous êtes la génération de données pour le fichier, vous pouvez créer un nouveau post pour cette question.
OriginalL'auteur haraman