7
votes

Comment afficher un fichier après le téléchargement 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 pour une réponse et je ne pouvais en trouver un, mais je suis très sûr que quelque chose m'a sauté. Le problème est que je ne sais pas comment accéder à un fichier après que je lui ai téléchargé le dossier App_Data. J'utilise le même code que j'ai trouvé sur tous les forums:

Pour ma vue, j'utilise ce p> xxx pré>

pour mon contrôleur j'utilise ce p>

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


2 commentaires

Je veux que ma base de données ait seulement le chemin du fichier, pas le fichier lui-même.


Pourriez-vous définir ce que vous voulez dire par "Afficher un fichier", voulez-vous l'afficher sous forme de lien ou souhaitez-vous afficher le contenu réel du fichier?


3 Réponses :


11
votes

Vous pouvez accéder à votre fichier serveur de fichiers (afin d'accéder à son contenu à partir de l'application ASP.NET) - utilisez simplement serveur.mappath ("~ / app_data / uploads / ") à Obtenez le chemin absolu (par exemple, C: /inetpub/wwwwwroot/myapp/add_data/myfile.txt).

Contenu du dossier App_Data ne sont pas directement accessibles par URL pour des raisons de sécurité. Toutes les configurations, les bases de données sont stockées là-bas, donc c'est plutôt évident pourquoi. Si vous avez besoin de votre fichier téléchargé pour être accessible via URL - téléchargez-le sur un autre dossier.

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


0 commentaires

0
votes

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

Bien sûr, cela dépend de vos besoins. Si vous ne vous souciez pas du tout sur qui peut accéder aux images, alors simplement les télécharger dans un dossier en dehors du dossier App_Data :)

Tout dépend de vos besoins.


0 commentaires

9
votes

Si cela aide toute personne, voici un exemple simple pour un PDF:

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


0 commentaires