Si j'ai réussi à localiser et vérifier l'existence d'un fichier en utilisant Server.MapPath et que je veux maintenant envoyer l'utilisateur directement à ce fichier, quel est le le plus rapide moyen de convertir ce chemin absolu dans un chemin Web relatif?Chemin absolu retour au chemin Web
Répondre
Peut-être que cela pourrait fonctionner:
String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);
(j'utilise C#, mais pourrait être adapté à v)
(@ Tags2k: J'ai editted la réponse ci-dessus)
Cela ne fonctionne que dans le contexte d'une demande. – bzlm
@ [GateKiller] (http://stackoverflow.com/questions/3164?sort=oldest#3218): Notez que si vous utilisez des répertoires virtuels IIS sur votre site Web, votre solution peut échouer car le chemin physique de l'application peut être différent de le chemin physique du fichier. – Costo
Si vous utilisiez Server.MapPath, vous devriez déjà avoir le chemin Web relatif. Selon le MSDN documentation, cette méthode prend une variable, le chemin, qui est le chemin virtuel du serveur Web. Donc, si vous étiez en mesure d'appeler la méthode, vous devriez déjà avoir le chemin Web relatif immédiatement accessible.
Ce n'est pas nécessairement vrai - l'appel MapPath aurait pu être effectué par une autre méthode et passé dans/appelé depuis ma méthode de vérification de fichier, ou (dans mon cas) construit à partir de plusieurs éléments, dont mon répertoire de ressources (défini comme "~/__ Resources"). Évidemment, diriger l'utilisateur vers ce chemin va entraîner des résultats inattendus. Il serait également utile de le savoir car, parfois, le chemin du fichier absolu peut avoir été retiré de la base de données sans aucune autre information contextuelle. – tags2k
[@tagsk] (http://stackoverflow.com/questions/3164#3195) - Je ne sais pas à ce sujet. Par la manière dont la méthode est définie, si la chaîne que vous entrez dans Server.MapPath est valide et renvoie un chemin de serveur physique, cela doit également être un chemin virtuel valide, quelle que soit la manière dont vous l'avez généré. En ce qui concerne l'utilisation du tilde (~) au début d'une adresse virtuelle, consultez cet article MSDN sur [chemins d'accès au site Web ASP.NET] (http://msdn.microsoft.com/en-us/library/ms178116.aspx) :> ASP.NET inclut l'application Web > l'opérateur racine (~), que vous pouvez utiliser > lors de la spécification d'un chemin dans le serveur > c –
Yaakov - Pas si. Par exemple, une fonction que j'utilise prend un chemin racine et renvoie une collection 'IEnumerable
Ne serait-il pas agréable d'avoir Server.RelativePath (chemin)?
bien, il vous suffit de l'étendre ;-)
public static class ExtensionMethods
{
public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context)
{
return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/");
}
}
Avec cela, vous pouvez simplement appeler
Server.RelativePath(path, Request);
un meilleur remplacement pour le chemin physique serait ~ /. path.Replace (context.ServerVariables ("APPL_PHYSICAL_PATH"), "~ /") –
Je sais que c'est vieux, mais je devais tenir compte des répertoires virtuels (par Commentaire de @ Costo). Cela semble aider:
static string RelativeFromAbsolutePath(string path)
{
if(HttpContext.Current != null)
{
var request = HttpContext.Current.Request;
var applicationPath = request.PhysicalApplicationPath;
var virtualDir = request.ApplicationPath;
virtualDir = virtualDir == "/" ? virtualDir : (virtualDir + "/");
return path.Replace(applicationPath, virtualDir).Replace(@"\", "/");
}
throw new InvalidOperationException("We can only map an absolute back to a relative path if an HttpContext is available.");
}
J'aime l'idée de Canoas. Malheureusement, je n'ai pas "HttpContext.Current.Request" disponible (BundleConfig.cs).
J'ai changé les Methode comme ceci:
public static string RelativePath(this HttpServerUtility srv, string path)
{
return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}
- 1. Chemin relatif au chemin absolu dans Elisp
- 2. Chemin absolu et chemin relatif
- 3. tomcat webapps répertoire chemin absolu?
- 4. Asp.Net Chemin absolu d'une URL
- 5. Résolution d'un chemin d'URL relatif vers son chemin absolu
- 6. Chemin absolu du répertoire de démarrage exécutable
- 7. comment obtenir le serveur chemin absolu
- 8. Obtention du chemin absolu d'un fichier
- 9. Raisons d'avoir un chemin absolu dans .NET
- 10. Liens pointant vers le chemin absolu
- 11. Convertir chemin Unix au chemin DOS
- 12. convertir le chemin virtuel en chemin Web réel dans ASP.NET
- 13. ASP.NET + Accès au chemin refusé
- 14. Comment obtenir un chemin de fichier absolu en Python
- 15. Chemin.Combine absolu avec chaînes de chemin d'accès relatives
- 16. Exécuter avec Ant fonctionne avec le chemin absolu mais pas le chemin relatif
- 17. Comment convertir un chemin relatif en un chemin absolu dans une application Windows?
- 18. Concaténation Environment.CurrentDirectory avec chemin de retour
- 19. Comment trouver le chemin absolu d'une action du contrôleur?
- 20. Comment transformer le contenu d'un var en un chemin absolu?
- 21. Obtention d'un chemin absolu à partir des sélecteurs xpath
- 22. svn chemin d'accès au dépôt
- 23. Obtention du chemin absolu correct dans la bibliothèque utilisée par le projet Web
- 24. gcc/gdb: Comment intégrer le chemin absolu au fichier source dans les informations de débogage?
- 25. Comment définir un chemin d'accès au référentiel svn vers un chemin d'accès au serveur?
- 26. Définir le chemin d'accès au dossier "Bin"
- 27. L'accès au chemin '\\ Image0 \ Abc' est refusé
- 28. ASP.NET MVC chemin relatif au JavaScript
- 29. Comment écrire chemin unix par rapport au format XML
- 30. Pourquoi ServletContext # getRealPath ("/") renvoie un chemin relatif?
Cette question est de deux ans, la possibilité de poster des commentaires n'existait pas à l'époque. "GEEZ". – tags2k