Comment afficher un fichier après l’avoir téléchargé sur App_Data / Uploads dans MVC 3 avec Razor?

Je suis nouveau à MVC et je suis coincé avec un problème. J’ai cherché partout une réponse et je ne pouvais pas en trouver une, mais je suis très sûr que quelque chose m’a oublié. Le problème est que je ne sais pas comment accéder à un fichier après l’avoir téléchargé dans le dossier App_Data. J’utilise le même code que j’ai trouvé sur tous les forums:

Pour ma part j’utilise cette

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype="multipart/form-data" })) {   } 

Pour mon contrôleur j’utilise ceci

 public class HomeController : Controller { // This action renders the form public ActionResult Index() { return View(); } // This action handles the form POST and the upload [HttpPost] public ActionResult Index(HttpPostedFileBase file) { // Verify that the user selected a file if (file != null && file.ContentLength > 0) { // extract only the fielname var fileName = Path.GetFileName(file.FileName); // store the file inside ~/App_Data/uploads folder var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); file.SaveAs(path); } // redirect back to the index action to show the form once again return RedirectToAction("Index"); } } 

Mon modèle est

 public class FileDescription { public int FileDescriptionId { get; set; } public ssortingng Name { get; set; } public ssortingng WebPath { get; set; } public long Size { get; set; } public DateTime DateCreated { get; set; } } 

Le truc, c’est que je veux télécharger un fichier dans la firebase database, puis que WebPath soit le lien vers mon fichier. J’espère que j’ai été assez clair. Toute aide serait vraiment appréciée. Merci

Vous pouvez accéder à votre fichier côté serveur (donc pour accéder à son contenu depuis une application ASP.NET) – utilisez simplement Server.MapPath("~/App_Data/uploads/") pour obtenir le chemin absolu (par exemple, C: / inetpub / wwwroot / MyApp / Add_Data / MyFile.txt).

Le contenu du dossier App_Data n’est pas directement accessible par URL pour des raisons de sécurité. Toutes les configurations, les bases de données y sont stockées, il est donc assez évident de savoir pourquoi. Si vous souhaitez que votre fichier téléchargé soit accessible via une URL, téléchargez-le dans un autre dossier.

Je suppose que vous avez besoin que ce fichier soit accessible via le Web. Dans ce cas, la solution la plus simple consiste à conserver un nom de fichier (ou le chemin absolu complet comme indiqué au début) dans votre fichier dans une firebase database et à créer une action de contrôleur qui prendrait un nom de fichier et renverrait le contenu de votre fichier.

Au cas où cela aiderait quelqu’un, voici un exemple simple pour un PDF:

 public ActionResult DownloadPDF(ssortingng fileName) { ssortingng path = Server.MapPath(Ssortingng.Format("~/App_Data/uploads/{0}",fileName)); if (System.IO.File.Exists(path)) { return File(path, "application/pdf"); } return HttpNotFound(); } 

Vous devez utiliser un gestionnaire générique pour accéder aux fichiers. IMO stockant les images / fichiers dans le dossier App_Data est la meilleure pratique, car elle ne sert pas les fichiers par défaut.

Bien sûr, cela dépend de vos besoins. Si vous ne vous souciez pas du tout de savoir qui peut accéder aux images, téléchargez-les simplement dans un dossier situé en dehors du dossier app_data 🙂

Tout dépend de vos besoins.