2009-03-06 9 views
0

Le contrôle FileUpload nécessite que je fournisse un répertoire racine dans la méthode SaveAs(). Cependant, je préfèrerais que les fichiers téléchargés soient placés dans un répertoire virtuel, tel que "~/UserFiles/[nom d'utilisateur]/[nom de fichier]". Y a-t-il un moyen pour moi d'accomplir cela?FileUploads et répertoires racine

+0

Soyez conscient de ce que vous faites quand un téléchargement va directement dans un dossier qui est accessible à partir de votre serveur Web. On dirait que vous ouvrez une vulnérabilité grave. –

Répondre

4

Utilisez les pages MapPath méthode: -

ctl.SaveAs(MapPath("~/UserFiles/[username]/[filename]")); 
+0

Merci. Tout a un sens maintenant. –

+0

ummm. . . est-il un moyen pour moi de créer "~/userdata/[nom d'utilisateur]" s'il n'existe pas déjà? –

+0

System.IO.Directory.CreateDirectory (MapPath ("~/userdata/[nom d'utilisateur]")); – AnthonyWJones

0

Non, le mot clé est requis. Vous pouvez utiliser votre script pour copier le fichier après le téléchargement.

+0

Hmmm. Savez-vous quelle est la justification pour exiger un répertoire enraciné pour ce contrôle? Cela me semble fou. –

+0

Le rationnel est que c'est un chemin de fichier physique puisque vous enregistrez dans le système de fichiers. Les chemins dans les URL sont des chemins logiques non physiques. Il est probable que de nombreuses utilisations enregistreront le fichier quelque part en dehors des dossiers représentant le site Web. – AnthonyWJones

+0

Ouais. Mais dans mon cas, les utilisateurs n'ont aucun contrôle sur l'endroit où le fichier est sauvegardé. Seul mon programme le fait. –

0

Parfois, le MapPath n'est pas directement accessible.

Dans ce cas, utilisez

ctl.SaveAs(Server.MapPath("~/UserFiles/[username]/[filename]")); 
+0

est-il un moyen pour moi de créer "~/userdata/[nom d'utilisateur]" s'il n'existe pas déjà? –

Questions connexes