Nous stockons un groupe de noms de documents étranges sur notre serveur Web (les personnes les téléchargations) disposant de différents caractères tels que des espaces, des ampersands, etc. Lorsque nous générons des liens vers ces documents, nous devons y échapper afin que le serveur puisse les rechercher. le fichier par son nom brut dans la base de données. Cependant, aucune des fonctions intégrées d'évasion .NET ne fonctionnera correctement dans tous les cas.
Prenez le document Toutefois, Hello # là-bas.docx code>: p>
urlencode Code> va gérer cela correctement: p>
urlencode code> pas em> manche
bonjour.docx correctement: P>
HttpUtility.UrlPathEncode("Hello#There.docx");
"Hello#There.docx"
3 Réponses :
Jetez un coup d'œil au Méthode URI.ESTRAINATION A >: Uri.EscapeDataString("Hello There.docx") // "Hello%20There.docx"
Uri.EscapeDataString("Hello#There.docx") // "Hello%23There.docx"
Remarque Si vous avez des caractères étrangers, cela le convertira en tant que représentation de UTF8 échappée, auquel cas vos utilisateurs peuvent toujours obtenir des noms de fichiers amusants en fonction de l'application qui ouvre le fichier. Par exemple, "hélo.docx" (Wich est affiché correctement par navigateur), deviendra "H% C3% A9LO.DOCX". Mais cela peut être assez bien dans ce cas (et le BTW, c'est la même chose avec UrlenCode), mais si "Utilisateur" est une forte exigence, je vous suggère de vérifier cela aussi.
+1 Mais, pourriez-vous écrire un synopsis rapide de quand utiliser urlencode code> vs
urlpathenCode code> vs
échappement code>?
Je m'approcherais d'une manière différente: N'utilisez pas le nom Nom du document em> comme clé de votre recherche - utilisez un GUID ou un autre paramètre d'identifiant que vous pouvez mapper sur le nom du document sur le disque. dans votre base de données em>. Non seulement cela garantirait que la garantie de l'unicité, mais vous n'auriez pas non plus ce problème de s'échapper en premier lieu. P>
Pourquoi ne pouvez-vous pas utiliser un Disposition de contenu code> HTTP dans votre réponse? Cela devrait vous permettre de définir le nom du fichier
Vous pouvez utiliser le caractère @ pour échapper aux chaînes. Voir les pièces de code ci-dessous. sortie: \ n \ n \ n \ n p> sortie: \ df \ %% ^ \ ^) \ t% % p> Ce type de formatage est très utile pour les noms de chemin et pour créer des regexes. p> p>
Cela a à voir avec l'analyseur C #, pas l'application.
Comment gérez-vous les DUPS si les utilisateurs téléchargent des fichiers avec le même nom? Ne serait-il pas plus facile de générer les noms (comme un GUID, par exemple) et de stocker le nom sympa, fourni par l'utilisateur, dans la base de données (ainsi que le nom de fichier généré)?
Vous avez probablement besoin de quelque chose comme ça [enlever les caractères illégaux du chemin et des noms de fichiers] [1] [1]: Stackoverflow.com/questions/146134/...
@Kirkwoll - Bonne question :) L'URL en fait i> ressemble à i>
/ docs / 12345 / mon fichier.docx code> - Le 12345 est une clé unique, mais nous voulons que c'est "sauvegarder Comme "boîte de dialogue pour enregistrer le fichier avec le même nom tel que téléchargé à l'origine. Nous vérifions également que le nom de fichier correspond à la clé d'empêcher les personnes de deviner des documents aléatoires (oui, pas 100% sécurisé mais assez bon) ..
Je ne sais pas si "l'URL coding" serait plus approprié que "Escape" ici car c'est précisément ce que vous recherchez. Ensuite, cela pourrait créer une confusion avec la méthode
urlencode () code> que vous mentionnez.
@Mikechristensen: Cela devrait fonctionner simplement bien à l'aide d'un
Disposition de contenu Code> HTTP-Rubrique avec
pièce jointe; nom_file = mon fichier.docx code>
@Brokenglass - Yea, nous définissons également ces en-têtes de réponse HTTP, mais je pense qu'il y avait des cas, cela ne fonctionnait pas comme nous le voulions. Je peux vous tromper avec cet itinéraire un peu plus, mais je préfère également les URL plus amies que cela est possible.