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

ASP.NET Discussion :

PDF corrompu après upload


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut PDF corrompu après upload
    Bonjour,

    Nous avons un petit site intranet qui permet à des utilisateurs d'uploader des PDF dans un dossier public Exchange 2003.

    Le site fonctionne globalement de la manière suivante:

    - L'utilisateur créée un PDF pdfCreator ou office 2012...)
    - Il met ensuite ce PDF dans un dossier public temporaire (je sais ce n'est pas simple)
    - Il va sur le site intranet dans la section upload
    - Le site détecte tous les PDF présents dans le dossier temporaire
    - L'utilisateur sélectionne le PDF qu'il veut uploader
    - Upload le PDF dans le dossier public et efface le pdf du dossier temporaire

    Bien entendu, si dans le dossier public final il existe déjà un PDF, il est remplacé.

    Maintenant, voici le problème:

    Sous Windows XP, IE8, pas de problème.
    Sous Windows 7, IE8 (même version), le PDF est uploadé mais lorsqu'on veut le lire il est corrompu.
    Il manque en fait la fin du PDF, le trailer.

    Un avis là dessus?

    Pour info, voici en gros le code:

    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
     
    '========================================
    '= Récupération de la taille du fichier =
    '========================================
    Set FSO = Server.CreateObject("Scripting.FileSystemObject")
    Set fich = FSO.GetFile(dirtemp & "\" & file)
    taille = fich.size
    		'==============================================================
    		'= récupération du pointeur sur l'ancienne version du fichier =
    		'==============================================================
    		If FSO.FileExists(dirdocpubl & "\" & file) Then
    			Set fichOld = FSO.GetFile(dirdocpubl & "\" & file)
     
    			'=====================================
    			'= Suppression de l'ancienne version =
    			'=====================================
    			fichOld.Delete
     
    			Set fichOld = Nothing
    		End If
     
     
     
    fich.Copy (dirdocpubl)
    fich.Delete

  2. #2
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Bonjour

    - Il met ensuite ce PDF dans un dossier public temporaire
    pourquoi ne pas le mettre directement dans le repertoire public ? ça réglerait le problème ...

    Sinon : utilises fso.copyfile(source, destination) au lieu de fich.Copy (dirdocpubl)


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    Bonjour,

    Parce qu'il y a un formulaire que les utilisateurs doivent remplir avant l'upload et qui renseigne une BDD (incrémentation de versions, commentaires...).

    Ce site est un vieux site fait en 2005, voir avant... et il fait un peu ce que SharePoint fait maintenant...

    Je n'ai pas le droit de modifier le site, il y a une équipe DEV (mais peu connaissent ASP).


    J'ai pensé à modifier la méthode pour copier.. mais pourquoi le code marcherait sur XP et plus sous Windows 7, comme si tout le fichier n'était pas copié.

    J'ai repris le code et j'ai créé un script ASP à part: je n'ai aucun problème pour upload et lire le PDF.
    Je pense donc que le problème n'est pas forcément dans la partie du code qui fait la copie, il doit y avoir quelque chose avant ou après qui corrompt le fichier. Je sais qu'après, il y a du code qui modifie des droits sur le fichier...

    Pour être plus juste, voici le code exact de la page qui exécute l'upload.

    Création c'est lorsqu'il y a un nouveau fichier sans incrémentation de version.

    Modification, incrémentation de la version d'un fichier.

    Il y a juste la partie concernant la variable dirdocpriv que je n'ai pas encore comprise... il est possible que le problème vienne de là.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
     
    '==============================
    '= Création ou modification ? =
    '==============================
    Dim creation
    creation = False
    If Request.QueryString("action") = "creation" Then creation = True
    %>
     
    <%
    '========================================
    '= Récupération de la taille du fichier =
    '========================================
    Set FSO = Server.CreateObject("Scripting.FileSystemObject")
    Set fich = FSO.GetFile(dirtemp & "\" & decode(Request.QueryString("nomdoc")))
    taille = fich.size
    %>
     
    <%
    '================================
    '= Gestion physique du document =
    '================================
     
    	'================
    	'= Modification =
    	'================
    	If Not creation Then
     
    		'==============================================================
    		'= récupération du pointeur sur l'ancienne version du fichier =
    		'==============================================================
    		If FSO.FileExists(dirdocpubl & "\" & decode(Request.QueryString("nomdoc"))) Then
    			Set fichOld = FSO.GetFile(dirdocpubl & "\" & decode(Request.QueryString("nomdoc")))
    		Else
    			Set fichOld = FSO.GetFile(dirdocpriv & "\" & decode(Request.QueryString("nomdoc")))
    		End If
     
    		'=====================================
    		'= Suppression de l'ancienne version =
    		'=====================================
    		fichOld.Delete
    		Set fichOld = Nothing
     
    	End If
     
    	'======================================
    	'= Création ou modification : Recopie =
    	'======================================
    	If Request.form("publ") = "publ" Then
    		fich.Copy dirdocpubl & "\" & decode(Request.QueryString("nomdoc"))
    		fich.Delete
    	Else
    		fich.Copy dirdocpriv & "\" & decode(Request.QueryString("nomdoc"))
    		fich.Delete
    	End If
    %>

  4. #4
    Membre éclairé

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    618
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 618
    Par défaut
    Le contexte était complètement différent ; mais sait-on jamais ....
    J'ai eu ce type de problème sur des RTF : tronqués lors d'une copie à travers le réseau.
    Le soucis venait de l'anti-virus.

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    Citation Envoyé par vanquish Voir le message
    Le contexte était complètement différent ; mais sait-on jamais ....
    J'ai eu ce type de problème sur des RTF : tronqués lors d'une copie à travers le réseau.
    Le soucis venait de l'anti-virus.


    J'ai pensé à ça mais le problème c'est que ça fonctionne depuis mon poste avec une copie du code.

    Et puis apparemment parfois ça fonctionne.

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    hum

    Je suis perdu car pourquoi tout fonctionnerait sous XP et pas sur 7

  7. #7
    Modérateur
    Avatar de roro06
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    1 480
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 480
    Par défaut
    Je suis perdu car pourquoi tout fonctionnerait sous XP et pas sur 7
    Parce que ce n'est pas la même version de IIS qui tourne (v6 d'un côté, 7.5 de l'autre). Forcément, scripting.filesystemObject ne doit pas être implémenté de la même manière. De plus, microsoft ne supporte plus ASP classic depuis win7 (et peut-être même vista) .


    N'oubliez pas de consulter les FAQ ASP et les cours et tutoriels ASP

    " La vie c'est quelque chose de très fort et de très beau.... La vie appartient a tous les vivants. It's both a dream and a feeling. C'est être ce que nous ne sommes pas sans le rester. La vie c'est mourir aussi....Et mourir c'est vraiment strong...c'est rester en vie au delà de la mort...Tous ceux qui sont morts n'ignorent pas de le savoir."
    (J.C. VanDamme, humoriste et philosophe belge . A moins que ce ne soit l'inverse ...)

    Chuck Norris comprend JC Van Damme.

  8. #8
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    Citation Envoyé par roro06 Voir le message
    Parce que ce n'est pas la même version de IIS qui tourne (v6 d'un côté, 7.5 de l'autre). Forcément, scripting.filesystemObject ne doit pas être implémenté de la même manière. De plus, microsoft ne supporte plus ASP classic depuis win7 (et peut-être même vista) .


    Quel rapport ? Le site est hébergé sur un serveur 2003... je ne vois pas en quoi IIS du client changerait quelque chose?

    Sans compter que c'est aussi le serveur qui gère l'upload.

    Le client ne fait que de l'affichage d'infos...

    Je précise le schéma:

    Voilà ce que fait l'utilisateur sur son poste:

    1 - Utilisateur génère un PDF. L'outil n'a pas d'importance car le problème est le même sur plusieurs outils
    2 - Utilisateur place ce PDF dans un dossier public exchange 2003 (Stockage Temp) auquel il a accès
    NB: le fichier n'est pas corrompu à ce moment là !
    3 - Utilisateur se connecte au site web en administrateur
    4 - Il va sur une page qui liste les PDF qui sont dans le dossier Stockage Temp
    5 - Il sélectionne un de ces PDF
    6 - Entre des informations qui seront stockées en BDD sur ce PDF
    7 - Il valide


    Voilà ce qui se passe côté serveur maintenant.
    1 - Si le fichier n'existait pas, il s'agit d'une création, sinon une mise à jour
    2 - Si création, il copie le fichier de Stockage Temp vers un dossier public exchange sur le même serveur appelé Publication
    3 - Si modification, il supprime l'ancien fichier du dossier Publication puis copie le nouveau dans le répertoire Publication
    4 - Suppression du fichier dans Stockage Temp
    5 - Ajout des informations sur le fichier dans une BDD

    Et c'est tout...

    Résultat: les fichiers qui sont mis à jour sont systématiquement corrompus depuis le passage du client vers Windows 7.

    Pour être précis, il manque le trailer du PDF, comme s'il n'était pas allé au bout de l'upload.

Discussions similaires

  1. Fichier excel corrompu apres copie
    Par jaudurier dans le forum Maven
    Réponses: 6
    Dernier message: 03/07/2007, 10h57
  2. Fichier corrompu après téléchargement HTTP
    Par PP(Team) dans le forum C++
    Réponses: 2
    Dernier message: 26/04/2007, 09h09
  3. [Upload] Redimensionner une image après upload
    Par putubudiarta dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2007, 12h32
  4. [Upload] Fichier interdit d'accès après upload
    Par Bisûnûrs dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2006, 00h33
  5. [Upload] Insertion image dans mysql après upload
    Par alexmorel dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 23h46

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