Chaines de caractères - upload

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 438 fois - Téléchargée 36 fois

Contenu du snippet

Ce code peut servir de complément au projet de fabrice69 "FabManager" pour y intéger l'upload. De nombreux exemples sur l'upload de fichier existent mais très peu pensent à préciser le besoin fréquent de manipuler le nom des fichiers uploadés par un utilisateur.

Dans mon cas mes utilisateurs n'hésitent pas à uploader des fichiers dont le nom ressemble plus à une phrase qu'un nom de fichier, lorsque l'on tombe pas dans le délire du roman en guise de nom de fichier, sisi çà existe !

Voici donc quelques classes concernant l'épuration de certains caractères et le remplacement des caractère à accents, ces derniers posent souvent problèmes lors du téléchargement, cf FabManager http://www.aspfr.com/code.aspx?ID=23262)

Source / Exemple :


'Fichier ManipFile.vb
'-------------------------------------------------------------------------------------------------------------------------------------

Imports System
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions

Public Class ManipFile

    '--------------------------------------------------------------------------------------------
    ' Nettoyage des chaines de caractères
    '--------------------------------------------------------------------------------------------

    ' Vire les accents
    Public Shared Function noaccent(ByVal txt)

        Dim strTemp As String = txt

        ' création des objet Regex
        Dim regE As New Regex("(é|è|ê|ë)")
        Dim regA As New Regex("(à|â|ä)")
        Dim regC As New Regex("(ç)")
        Dim regU As New Regex("(ù)")

        'Remplace les caractères indésirables par leur équivalent
        strTemp = regE.Replace(strTemp, "e", 1)
        strTemp = regA.Replace(strTemp, "a", 1)
        strTemp = regC.Replace(strTemp, "c", 1)
        strTemp = regU.Replace(strTemp, "u", 1)

        noaccent = strTemp

    End Function

    'Vire tous les caractères indésirables,
    'et remplace les accents par leur équivalent sans accent
    Public Shared Function nochar(ByVal strTxt As String) As String

        ' Moi ces caractères j'en veux pas dans le nom d'un fichier, à vous de faire le trie
        Dim ListDelChar As String = " ²&~#'{([-|`\^@)]°+=}<>,?;/:!§%*µ$£€"
        Dim DelChar As String
        Dim i As Integer

        For i = 1 To Len(ListDelChar)
            DelChar = ListDelChar.Chars(i - 1)
            strTxt = Replace(strTxt, DelChar, String.Empty)
        Next

        nochar = noaccent(strTxt)
        Return nochar

    End Function

'Permet d'avoir uniquement le nom du fichier à partir de son path
    Shared Function IsoleFile(ByVal path As String) As String

        Dim sSplit() As String
        sSplit = Split(path, "\")
        path = sSplit(UBound(sSplit))

        IsoleFile = path

    End Function

' Vire les \ et les renplace par des /
    'Pour passer d'un path à une url par exemple 
    Public Shared Function noantislash(ByVal txt)

        Dim strTemp As String = txt

        'Remplace le caractères indésirable
        strTemp = Replace(strTemp, "\", "/")
       
        noantislash = strTemp

    End Function

    'Upload
    Shared Function Upload( ByVal sFile As String, ByVal sFullPath As String, ByVal txtUpload As System.Web.UI.HtmlControls.HtmlInputFile) As String

        Try
            'Ecriture sur server, nécessite droits ntfs sur compte asp.net
            txtUpload.PostedFile.SaveAs(sFullPath)
            'Infos comme quoi çà c'est bien passé
            Upload = "Ok"
        Catch Ex As Exception
            Upload = "Envoie du fichier " & sFile & " vers le serveur n'a pas réussi pour la raison suivante : " & Ex.Message
        Finally

        End Try

    End Function

End Class

'-------------------------------------------------------------------------------------------------------------------------------------

'Fichier upload.aspx
'-------------------------------------------------------------------------------------------------------------------------------------
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="upload.aspx.vb" Inherits="votreappli.upload"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
	<title>Votre application</title>
</HEAD>
<body>
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">

<TABLE class="ridge" cellSpacing="0" width="100%">
	<TR>
	               <TD width="30%" >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <STRONG>
                                       <FONT color="#ffffcc" size="2">Importation de Fichier</FONT></STRONG>
	               </TD>
	               <TD align="left" width="70%" colSpan="2" rowSpan="1"></TD>
	</TR>
	<TR>
		<TD width="15%">&nbsp;</TD>
		<TD width="85%">&nbsp;</TD>
	</TR>
	<TR>
		<TD width="15%">&nbsp;&nbsp;&nbsp;&nbsp; Fichier</TD>
		<TD width="85%">
		<INPUT id="txtUpload" type="file" name="txtUpload" runat="server">&nbsp;&nbsp;
		</TD>
	</TR>
	<TR>
		<TD width="15%">&nbsp;</TD>
		<TD width="85%">&nbsp;</TD>
	</TR>
</TABLE>
<br>
<asp:ImageButton id="BtnUpload" runat="server" ImageUrl="../img/GValider.gif" ToolTip="Enregistrer"></asp:ImageButton>
</form>
</body>
</HTML>

'Fichier upload.aspx.vb
'-------------------------------------------------------------------------------------------------------------------------------------

Imports System.Web

Public Class upload
    Inherits System.Web.UI.Page

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

'Valide l'Upload
Private Sub BtnUpload_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles BtnUpload.Click

        If txtUpload.PostedFile.FileName <> String.Empty Then

            'Instanciation de la class
            Dim manip As New ManipFile

            'Initialisation des variables
            Dim sFullDir As String = "E:\VotreREP\VotreSSRep
            Dim sFile As String = manip.nochar(manip.IsoleFile(txtUpload.PostedFile.FileName))
            Dim sFullPATH As String = sFullDir & "\" & sFile
            
            'Upload
            manip.Upload(sFile, sFullPATH, txtUpload)

            'Réinitialisation des textbox
            sFullPATH = String.Empty
            sFullURL = String.Empty

         End If

    End Sub

End Class

Conclusion :


Remarque :

Lors d'un nettoyage en masse d'une chaine de caractère et remplacement par 'rien', évitez peut-être d'utiliser à tout va Replace(). C'est quant même plus court d'utiliser une boucle cf. nochar().

De plus de cette manière, vous pourrait enrichir cette fonction d'un paramètre supplémentaire spécifiant la liste de caractères à virer selon les cas, stockez vos liste dans le web.config par exemple ! Ce qui serait impossible avec les Replace() en masse.

Public Shared Function nochar(ByVal strTxt As String, Byval strList as String) As String

' Moi ces caractères j'en veux pas dans le nom d'un fichier, à vous de faire le trie
Dim ListDelChar As String = strList
Dim DelChar As String
Dim i As Integer

For i = 1 To Len(ListDelChar)
DelChar = ListDelChar.Chars(i - 1)
strTxt = Replace(strTxt, DelChar, String.Empty)
Next

nochar = noaccent(strTxt)
Return nochar

End Function

Ex : nochar("nom du fichier d'origine", ConfigurationSettings.AppSettings("Liste1"))

PS : je n'ai pas eu le temps de tester la source adaptée qui est extraite d'une de mes appli en dev donc svp INDULGENCE ! Merci

Denis

A voir également

Ajouter un commentaire

Commentaires

cs_v1nce
Messages postés
16
Date d'inscription
vendredi 13 février 2004
Statut
Membre
Dernière intervention
12 février 2008
-
Il est préférable de définir la liste des caractères qu'on accepte (et pas ceux qu'on veut exclure)
cs_arcollet
Messages postés
31
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
13 avril 2008
-
en fait l'octet null est un " " ou le caractère ascii 255 équivalent de 0x00 ?
Parce que en ce qui concerne la fonction, dans sa liste de caractères j'épure bien tous les " " !

Denis
cs_arcollet
Messages postés
31
Date d'inscription
jeudi 12 juin 2003
Statut
Membre
Dernière intervention
13 avril 2008
-
Merci pour l'info, j'ai effectivement fait l'impasse

denis
theXman
Messages postés
37
Date d'inscription
mardi 25 février 2003
Statut
Membre
Dernière intervention
11 mars 2006
-
Pas mal du tout.
Un autre un point que tu pourrais prendre en compte est l'octet NULL :
http://www.athias.fr/jerome/DOC/0x00_vs_ASP_File_Uploads_FR.pdf

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.