Télécharger/fichier de Flux à partir de l'URL - asp.net
J'ai besoin de diffuser un fichier qui aura pour conséquence la sauvegarde rapide dans le navigateur.
La question est, le répertoire dans lequel se trouve le fichier est pratiquement mappé, donc je ne peux pas utiliser de Serveur.MapPath afin de connaître son emplacement réel. Le répertoire n'est pas au même endroit (ou même physiques du serveur sur la live box) que le site web.
Je voudrais quelque chose comme ce qui suit, mais qui va me permettre de passer une URL de site web, et non sur un serveur de fichier chemin d'accès.
J'ai peut-être pour la fin de la création de mon chemin de fichier à partir d'une config chemin d'accès de base, puis ajouter le reste du chemin, mais j'espère que je peux le faire de cette façon au lieu.
var filePath = Server.MapPath(DOCUMENT_PATH);
if (!File.Exists(filePath))
return;
var fileInfo = new System.IO.FileInfo(filePath);
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", String.Format("attachment;filename=\"{0}\"", filePath));
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.WriteFile(filePath);
Response.End();
- Pouvez-vous élaborer un peu sur ce que tu veux dire par "pratiquement mappé"? Un virtuel IIS dossier accessible par les Url?
- C'est à l'aide d'une VPP de chemin d'accès, qui est un concept d'utilisation par EpiServer CMS Nous avons configuré le chemin d'accès virtuel nom (c'est à dire "/documents/"), et alors préciser ce chemin d'accès physique cela devrait carte de trop (j'.e "//servername/documents"). Le système crée alors cette référence au répertoire au moment de l'exécution. Vous pouvez accéder aux fichiers via le web, les URL sans problème
- Le nom de fichier est en effet accessibile via l'URL. J'ai besoin d'utiliser cette URL pour transmettre le fichier, et non pas le chemin d'accès au serveur, comme je suis incapable de dertmine ce à partir de l'URL (à l'aide de MapPath)
- Si vous connaissez l'URL et de l'extension de fichier s'ouvre l'enregistrer comme invite dans le navigateur (ou est-ce l'un de vos problèmes?), vous pourriez peut-être rediriger la demande vers le fichier que vous souhaitez télécharger? Sinon, user97970 la suggestion semble être la voie à suivre.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser HttpWebRequest pour obtenir le fichier et de le transmettre au client. Cela vous permet d'obtenir le fichier avec une url. Un exemple de ce que j'ai trouvé ( mais ne me souviens pas où donner de crédit ) est
// prepare the response to the client. resp is the client Response
, ajouter ce bout de code:var resp = HttpContext.Current.Response;
Url de téléchargement d'octets et de convertir des octets dans les cours d'eau:
Je fais un peu les choses et je pensais ajouter une simple réponse. Je l'ai configuré comme une classe simple ici, mais je l'exécute tous les soirs à recueillir des données financières sur les entreprises que je suis.
Dans ce cas, j'ai passer une url et retourne la page au format HTML. Si vous voulez faire quelque chose de différent avec le cours d'eau au lieu de cela, vous pouvez facilement changer cela.
Vous l'utiliser comme ceci:
2 ans plus tard, j'ai utilisé de Dallas réponse, mais j'ai dû changer le
HttpWebRequest
àFileWebRequest
depuis que je suis reliant directement les fichiers. Vous ne savez pas si c'est le cas partout, mais j'ai pensé que je voudrais ajouter. Aussi, j'ai enlevévar resp = Http.Current.Resonse
et juste utilisé
Http.Current.Response
en place partout oùresp
a été référencée.La solution retenue de Dallas a été de travailler pour nous, si nous utilisons l'Équilibrage de la Charge sur le serveur Citrix Netscaler (sans WAF politique).
Le téléchargement du fichier ne fonctionne pas à travers le livre de la Netscaler quand il est associé avec le WAF que le scénario actuel (Content-length ne pas être correct) est une violation de RFC et AppFW réinitialise la connexion, ce qui n'arrive pas quand WAF politique n'est pas associé.
Donc ce qui manquait, c'était:
Réponse.Fin();
Voir aussi:
Essaye de lire un fichier PDF avec asp.net est la production d'un "fichier endommagé"
Vous pouvez essayer d'utiliser le DirectoryEntry classe avec IIS préfixe de chemin: