Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    Echec de validation: 53-Le fichier 'c:\windows\system32\inetsrv\IMG_4035734409363.jpeg' est introuvable.
    Bonjour tout le monde.
    Je tente d'insérer une image dans une base de données SqlServer avec du code behind en asp.net.
    Voilà le code
    Code VB.NET :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub ValiderImage(ByVal CheminImage As String)
            If CheminImage = "" Then Exit Sub
            SqlConn.Open()
            Dim myCommand As New SqlCommand
            myCommand.Connection = SqlConn
     
            myCommand.CommandText = "update zz_societe set Logo=@BLOBData where (Code=@Idx)"
            myCommand.Parameters.Add(New SqlParameter("@Idx", ancien_code.Value))
     
            'Dim strBLOBFilePath As String = CheminImage
            Dim fsBLOBFile As New FileStream(CheminImage, FileMode.Open, FileAccess.Read)
            Dim bytBLOBData(fsBLOBFile.Length() - 1) As Byte
            fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length)
            fsBLOBFile.Close()
     
            myCommand.Parameters.Add(New SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, False, 0, 0, Nothing, DataRowVersion.Current, bytBLOBData))
     
            myCommand.ExecuteNonQuery()
            SqlConn.Close()
            myCommand = Nothing
     
            bytBLOBData = Nothing
            fsBLOBFile = Nothing
        End Sub

    Ce code marche proprement quand je développe en vb.net simplement. Mais ici, il marche quand je suis en mode développement. Mais quand je déploie l'application sur un serveur IIS, il m'affiche l'erreur suivante
    Echec de validation: 53-Le fichier 'c:\windows\system32\inetsrv\IMG_4035734409363.jpeg' est introuvable.
    Si quelqu'un a une idée, je suis preneur.
    Merci d'avance

  2. #2
    Membre chevronné
    Bonjour
    Sans doute que le fichier n'est pas transmis pendant l'installation ou que le chemin d'accès se nomme différemment sur le serveur.
    Vérifier que le fichier est sur le serveur, dans le bon dossier, au bout du bon chemin, et que ce dossier est accessible en lecture pour le user (voir les droits)
    :-)

  3. #3
    Membre du Club
    Je ne suis pas (de loin!) le développeur VB.NET le plus expérimenté mais j'utilise toujours une routine comme suit:

    Code VB.NET :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    If File.Exists(strFile) AndAlso Not FileInUse(strFile) Then
    ...
    End If


    Code VB.NET :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Public Function FileInUse(ByVal sFile As String) As Boolean
            If File.Exists(sFile) Then
                Try
                    Using f As New FileStream(sFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
                        f.Close()
                    End Using
                Catch exc As Exception
                    Return True
                End Try
            Else
                Return False
            End If
            Return False
        End Function

  4. #4
    Membre régulier
    Je ne fais pas de copie. Je fais une insertion d'image dans la base de données. Et lorsque je suis en mode création, le code marche sans problème.
    Quand je le déploie sur un serveur IIS, il me met ce message. A aucun moment je ne fais appel à ce répertoire "c:\windows\system32\inetsrv\".
    D'où sort-il et comment résoudre le problème. Je Signale que je développe en asp.net et c'est du code behind

  5. #5
    Modérateur

    Citation Envoyé par djelloharmel Voir le message
    A aucun moment je ne fais appel à ce répertoire "c:\windows\system32\inetsrv\".
    A priori tu passes en parametre le chemin :
    Code VB.NET :Sélectionner tout -Visualiser dans une fenêtre à part
    Private Sub ValiderImage(ByVal CheminImage As String)

    Puis tu charges l'image en utilisant ce chemin :
    Code VB.NET :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim fsBLOBFile As New FileStream(CheminImage, FileMode.Open, FileAccess.Read)
    Dim bytBLOBData(fsBLOBFile.Length() - 1) As Byte
    fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length)
    fsBLOBFile.Close()


    Il faudrait voir le code en amont, celui ou tu recuperes l'image du formulaire. Mais on peut deja t'orienter en disant qu'il faut recuperer directement les bytes plutot que de copier l'image sur le serveur.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre expérimenté
    Cela ressemble beaucoup à un soucis de dossier "courant".

    c:\windows\system32\inetsrv\ est le dossier d'exécution d'ISS qui est donc le dossier d'exécution (ou "courant") de votre programme.
    Il y a donc une différence du chemin "courant" sous ISS et sous Visual Studio.

    Comment est obtenu le chemin de votre image ?
    A priori, vous ne spécifiez pas un chemin complet.

    Attention, les fonctions purement ASP acceptent des chemins relatif à la racine de votre site.

    Response.Redirect( ) va comprendre un chemin comme "une_page.aspx" ou "~/une_page.aspx" alors qu'une fonction de System.IO.File ne comprendra absolument pas ce chemin.

    Pour obtenir le chemin Windows complet à partir du chemin relatif à la racine du site web, il faut utiliser HttpContext.Current.Server.MapPath("...");

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    HttpContext.Current.Server.MapPath("~/upload/mon_image.jpg")
    retournera quelque chose du style "C:\inetpub\wwwroot\monsite\upload\mon_image.jpg" qui sera manipulable par les routines IO classiques.

    Bien entendu MapPath fonctionne aussi en mode debug sous VS, mais là retourne le chemin où VS déploie votre projet pour le debugage (AppData ou une truc du genre).
    --
    vanquish

###raw>template_hook.ano_emploi###