IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Dotnet Discussion :

Erreur zip Fatale


Sujet :

Dotnet

  1. #1
    Membre éclairé
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 313
    Par défaut Erreur zip Fatale
    Bonjour
    j'ai une erreur quand je zippe des fichier de type:

    "{"error":"invalid entry size (expected 4294967295 but got 83 bytes)"}"

    La partie du code correspondante est :
    Code : 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
    25
    26
    27
    28
    29
    30
    Private Function WebservicePOSTOLS(ByVal WebURI As String, ByVal ZipFilePath As String) As String
        Dim request As WebRequest = WebRequest.Create(WebURI)
        request.Method = "POST"
          Dim byteArray As Byte() = System.IO.File.ReadAllBytes(ZipFilePath)
       request.ContentType = "application/octet-stream"
        request.ContentLength = byteArray.Length
        Dim dataStream As Stream
        Try
          dataStream = request.GetRequestStream()
        Catch ex As Exception
          Return ("ExceptionError : " + ex.Message)
          Exit Function
        End Try
        dataStream.Write(byteArray, 0, byteArray.Length)
        dataStream.Close()
        Dim response As WebResponse
       Try
          response = request.GetResponse()
        Catch ex As Exception
          Return ("ExceptionError : " + ex.Message)
          Exit Function
        End Try
        dataStream = response.GetResponseStream()
        Dim reader As New StreamReader(dataStream)
        Dim responseFromServer As String = reader.ReadToEnd()
        Return responseFromServer
        reader.Close()
        dataStream.Close()
        response.Close()
      End Function
    Merci pour votre soutien

  2. #2
    Membre éclairé
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 313
    Par défaut Ok
    Au fait j'ai oublié de mentionner que pour zipper j'utilise la Dll sharpZipLib
    Merci @ vous

  3. #3
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    elle intervient quand ton exception ? C'est quoi son nom ?
    Sinon la "valeur attendue" correspond à un nombre bien particulier : le max d'un int 32 non signé.
    Donc c'est peut-être un problème de valeur mal initialisée ou de dépassement mémoire.

    PS : SharpZipLib ne semble pas intervenir dans ce bout de code.

  4. #4
    Membre éclairé
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 313
    Par défaut Merci
    Merci pour le retour, l'erreur intervient au niveau de la réponse du serveur. ci-joint un capture d’écran

    Au fait je travail effectué est le suivant :

    1 - je zippe un dossier avec la DLL charpZipLib
    2 - Envoi le zip par un web service sur un serveur distant

    la fonction que j'ai mise est celle de l'envoi du datastream

    merci
    Images attachées Images attachées  

  5. #5
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Truc tout bête mais vu que je connais pas bien le VB je me demande : c'est normal que tu fasses un return avant tes close() ?

  6. #6
    Membre éclairé
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 313
    Par défaut
    Re
    oui Jopopmk que je clos à la fin, chose que je n'ai pas mentionner dans mes poste.
    quand je zippe en standard, cad j'ouvre winzip et je fais le travail bah, j'envoie via le webservice.

  7. #7
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Et c'est normal un truc comac ? VB ne cessera jamais de m'étonner

    Sinon le web service sur lequel tu tapes c'est quoi exactement (server, produit, protocole) ?
    L'archive que tu envoies taille combien normalement ?
    Quand tu passes en pas-à-pas quelle valeur te renvoie byteArray.Length ?
    As-tu le souci pour un fichier quelconque (autre que généré par SharpZipLib s'entend) ?

  8. #8
    Membre éclairé
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 313
    Par défaut
    Oh que oui , le vb c'est juste merveilleux lol
    le service web est un un produit fournit par les R&D que je manipule pas.
    Sinon j'envoie dans le Lenght la taille exacte, il me semble que c'est du coté du serveur, qu'il accepte pas ce type de Zip mais aprés le quoi et le comment , je patauge
    merci

  9. #9
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    De ce que je crois comprendre tu obtiens, en réponse du serveur, un message d'erreur au format JSON qui dit grosso modo :
    "tu m'avais promis 4Go de donnée et tu m'as juste envoyé 83 octets"

    Or, ce que tu "promets" c'est ce que tu mets dans dans le header Content-Length.
    D'où ma question : quelle valeur renvoie byteArray.Length ?

    Toujours d'après ce message tu sembles donc envoyer 83 octets.
    D'où mon autre question : combien taille l'archive que tu tentes d'envoyer ? Voir si ça correspond.

  10. #10
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    Je passe juste pour corriger une petite erreur.

    Citation Envoyé par jopopmk Voir le message
    Et c'est normal un truc comac ? VB ne cessera jamais de m'étonner
    MSDN Return
    Je ne pense pas que les Close() soient exécutés un jour, mes collègues VB (perso le VB me pique les yeux aussi ) et la msdn me confirme qu'un return en VB rend la main à l'appelant.
    Ce serait en effet étrange comme comportement. @souhail72 essaye de mettre un point d'arrêt sur tes .Close() et tu verras que les lignes ne seront jamais executées.

    Vu que cela ne donne en rien la solution au post, je sors ===>>[]

    J@ck.

  11. #11
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    C'est un bien étrange code pour uploader un fichier zip par ftp...

    Voilà un exemple tiré de la MSDN : How to: Upload Files with FTP
    C'est en anglais et en C#, mais ça donne une bonne idée de la chose.

    J'ai traduit le code en VB.NET via un convertisseur automatique et voilà ce que ça donne :
    Code VB : 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
    ' Get the object used to communicate with the server.
    Dim request As FtpWebRequest = DirectCast(WebRequest.Create("ftp://www.contoso.com/test.htm"), FtpWebRequest)
    request.Method = WebRequestMethods.Ftp.UploadFile
     
    ' This example assumes the FTP site uses anonymous logon.
    request.Credentials = New NetworkCredential("anonymous", "janeDoe@contoso.com")
     
    ' Copy the contents of the file to the request stream.
    Dim sourceStream As New StreamReader("testfile.txt")
    Dim fileContents As Byte() = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd())
    sourceStream.Close()
    request.ContentLength = fileContents.Length
     
    Dim requestStream As Stream = request.GetRequestStream()
    requestStream.Write(fileContents, 0, fileContents.Length)
    requestStream.Close()
     
    Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
     
    Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription)
     
    response.Close()

    Par contre, j'ai vu aussi que ça ne fonctionne que pour un fichier texte.
    Pour un fichier zip, il faut remplacer :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim sourceStream As New StreamReader("testfile.txt")
    Dim fileContents As Byte() = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd())
    Par :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim fileContents As Byte() = File.ReadAllBytes("testfile.zip")
    Mais je vois que ça tu le fais déjà, donc c'est bien.

    D'autre part, pour des fichiers volumineux, il vaut mieux streamer l'upload :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Using requestStream = request.GetRequestStream()
    	Using input = File.OpenRead("testfile.zip")
    		input.CopyTo(requestStream)
    	End Using
    End Using

    Enfin, je confirme que les Close après le Return ne sont pas exécutés.
    Pour tout ce qui est IDisposable, il vaut mieux utiliser l'instruction Using qui permet de libérer les ressources, même en cas d'exception.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/12/2010, 13h55
  2. erreur non fatale
    Par chrisbau dans le forum WinDev
    Réponses: 3
    Dernier message: 18/12/2009, 12h41
  3. Réponses: 1
    Dernier message: 03/10/2009, 11h36
  4. Erreur Lieur fatale
    Par Lucas Panny dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/07/2008, 08h04
  5. [ASE12] mess. erreur : WARNING - Fatal Error 644 occurred at Sep 21 2007 10:27PM.
    Par padraig29 dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 28/09/2007, 16h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo