Je vérifie l'existence d'un fichier, mais ne le trouve pas, qu'il soit présent ou non
if (System.IO.File.Exists("~/files/downloads/" + fileCode + ".pdf"))
{
return File("~/files/downloads/" + fileCode, "application/pdf", Server.UrlEncode(fileCode));
}
else
{
return View("ErrorNotExistsView");
}
Comment puis-je modifier le code pour vérifier l'existence du fichier correctement?
System.IO.File
fonctionnera si vous fournissez un chemin absolu ou relatif. Un chemin relatif ne sera pas relatif au dossier racine HTML, mais au répertoire de travail current. Le répertoire de travail en cours aura une valeur telle que C:\Program Files (x86)\IIS Express
.
Le caractère ~
au début du chemin de fichier est uniquement interprété comme faisant partie du contexte ASP.NET actuel, ce que les méthodes File
ne connaissent pas.
La méthode pour vous aider ici est HttpServerUtility.MapPath
Si vous êtes dans une méthode de contrôleur, vous pouvez appeler cette méthode sur l'objet HttpContext.Server
, sinon (par exemple dans une vue), vous pouvez utiliser HttpContext.Current.Server
.
var relativePath = "~/files/downloads/" + fileCode + ".pdf";
var absolutePath = HttpContext.Server.MapPath(relativePath);
if(System.IO.File.Exists(absolutePath)) ....
Voici ma solution:
<span>
@{
var profileImg = "/Images/" + User.Identity.GetUserId() + ".jpg";
var absolutePath = HttpContext.Current.Server.MapPath(profileImg);
if (System.IO.File.Exists(absolutePath))
{
<img alt="image" width="50" height="50" class="img-circle" src="@profileImg" />
}
else
{
<img alt="image" width="50" height="50" class="img-circle" src="~/Images/profile_small.jpg" />
}
}
</span>
Exists () peut renvoyer false si l'application ne dispose pas des autorisations suffisantes pour accéder au fichier. Vous devez donc les accorder à appPool sur des dossiers et des fichiers spécifiques.
File.Exists () aura besoin du chemin complet . Essayez d'utiliser quelque chose comme:
@"C:\users\yourUsername\myDocuments\files\\downloads\" + fileCode + ".pdf"
au lieu de:
"~/files/downloads/" + fileCode + ".pdf"