2012-09-06 4 views
1

dans mon contrôleur, c'est le code que j'ailien de téléchargement me donner exception filenotfound

public FileResult Download(string file) 
    { 



     var vFullFileName = HostingEnvironment.MapPath("~/App_Data/Files/"); 

     var files = uploadedfileRepository.AllIncluding(); 
     string filename = (from f in files 

          select f.FileName).First(); 


     return File(Path.Combine(vFullFileName, filename), "application/csv", filename); 
    } 

Je mets le point d'arrêt et le point de fichier dans le répertoire à droite, mais pourquoi donner encore me fichier introuvable exception?

et à mon avis c'est ce que j'ai

<td> 
      @Html.ActionLink("Download", "Download", new { id = item.FileName}) 
     </td 
+0

'App_Data' est un répertoire protégé, vous ne pouvez pas l'utiliser pour le téléchargement direct. – Aristos

+0

une idée à suggérer? –

+0

App_Data est accessible et utilisé pour stocker n'importe quoi. Il n'y a pas d'accès public depuis le navigateur mais votre contrôleur peut avoir une adresse. Assurez-vous que le fichier est là. – DarthVader

Répondre

0

Votre méthode action possède un paramètre portant le nom fichier. Mais vous êtes HTML aura un paramètre/chaîne de requête appelée id, au lieu fichier od, donc changer votre code en vue de

@Html.ActionLink("Download", "Download", new { file= item.FileName}) 

également pour obtenir le chemin, essayez ce

string fullFilePath=Path.Combine(Server.MapPath("~/App_Data"),filename) 
return File(fullFilePath,"application/csv",filename); 
+0

hey Shyju, merci pour la réponse, même je change le type de données au fichier, la même exception se bloque toujours là –

+0

vérifier cette réponse pour obtenir le chemin correct pour obtenir le chemin http: // stackoverflow .com/questions/1268738/asp-net-mvc-find-chemin absolu-à-l'application-data-folder-from-controller – Shyju

+0

donc le chemin utilisant plutôt l'accès direct à App_Data/Files, utilisez server.mappath pour y accéder, que diriez-vous de mon paramètre, puis-je le laisser en utilisant "fichier de chaîne"? –

0

App_Data est pour les fichiers de base de données accessibles par MS SQL Server, et peut-être propres fichiers de données de votre application (comme un index Lucene). IIS (et ASP.NET) sont configurés pour bloquer toutes les demandes client à ce répertoire.

La solution consiste simplement à déplacer les fichiers vers un autre répertoire. Créez simplement un nouveau dossier dans la racine de votre site (par exemple "CsvFiles") et créez un lien vers celui-ci. Cela dit, pourquoi ne pas servir une redirection HTTP 301 (ou même un lien direct) vers les fichiers CSV au lieu de les servir via votre application? MISE À JOUR: Cette réponse est incorrecte car en servant le contenu du fichier via une réponse de fichier MVC, le navigateur de l'utilisateur n'accède pas directement au répertoire App_Data.

+0

pas vraiment. vous stockez des choses dans App_data et y accédez, s'il y a un accès en lecture et en écriture. – DarthVader

+0

merci pour la réponse. mais comment aborder le chemin de la direction, tout code suggère plz –

+0

tout problème avec mon code tho, je comprends app_data est la propriété protégée maintenant, à part cela, tout problème que mon code a? –

Questions connexes