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

C# Discussion :

Webclient téléchargement mauvais fichier


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut Webclient téléchargement mauvais fichier
    Bonjour,

    J'ai un fichier ODT dans lequel se situent des liens, ces liens mènent vers des documents ressources sur internet.

    L'objectif de mon programme est de télécharger les fichiers (liens qui se trouvent dans le fichier ODT).

    Le problème est que quand j'exécute le programme, je retrouve dans mon dossier dans lequel sont censés se stocker les nouveaux fichiers, un fichier du nom de Download.aspx avec comme extension : ASP.NET Server Page.

    Je ne comprends pas pourquoi ça ne télécharge pas mes fichiers, pourtant j'ai bien mis comme paramètre ma variable link qui est le résultat des matchs de l'expression régulière.

    Voici le code concerné par la recherche de liens et le traitements de ces derniers :
    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
    // Recherche tous les liens qui commencent par "applnet.test.fr"
                string pattern = @"http://applnet\.test\.fr/GetContenu/Download\.aspx\?p1=.*?;p2=.*?;p5=.*?;p6=NOPUB";
                Regex regex = new Regex(pattern);
                MatchCollection matches = regex.Matches(contentXml);
     
                Directory.CreateDirectory(Path.GetDirectoryName(odtFilePath));
     
                // Traite chaque lien trouvé
                foreach (Match match in matches)
                {
                    string link = match.Value;
     
                    string[] parts = link.Split(new string[] { "aspx?" }, StringSplitOptions.None);
                    string queryString = parts[parts.Length - 1];
     
     
     
                    string[] parameterParts = Regex.Split(link, "(?<=aspx\\?)");
     
                    // Télécharge le document intranet correspondant
                    string newFileName = Path.GetFileName(new Uri(link).LocalPath);
                    string folderName = Path.GetFileNameWithoutExtension(odtFilePath);
                    string subFolderName = "PJ - " + folderName;
                    string localFilePath = "C:/PiecesJointes/";
                    string onlineFilePath = "https://com.test.fr/files/test/test/" + queryString;
     
     
     
     
                    using (WebClient client = new WebClient())
                    {
                        client.DownloadFile(link, localFilePath + newFileName);
                    }
     
                    // Remplace le lien par le chemin du document téléchargé
                    string newLink = localFilePath.Replace("\\", "/");
                    contentXml = contentXml.Replace(link, onlineFilePath);
                }

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 366
    Points
    5 366
    Par défaut
    Tu lui demande de télécharger le fichier nommé "http://applnet.test.fr/GetContenu/Download.aspx".
    Et c'est exactement ce qu'il fait.

    Tu ne dois pas télécharger cette page mais la faire exécuter comme le ferait ton navigateur.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par popo Voir le message
    Tu lui demande de télécharger le fichier nommé "http://applnet.test.fr/GetContenu/Download.aspx".
    Et c'est exactement ce qu'il fait.

    Tu ne dois pas télécharger cette page mais la faire exécuter comme le ferait ton navigateur.
    Ah d'accord, effectivement ça marche beaucoup mieux, je les récupère tous, je te remercie .

    J'ai encore un soucis c'est que quand j'utilisais ma méthode de téléchargement, je pouvais aussi mettre le nom du fichier généré ainsi que là où je voulais qu'il soit stocké (en paramètres).

    Maintenant, vu que le programme agit comme un navigateur et exécute simplement le lien matché. Comment est-il possible de le renommer sachant que ce n'est pas considéré comme un téléchargement par le programme ?

    Y'a-t-il un moyen d'exécuter les liens sans ouvrir de page de navigateur ? Je dois avouer qu'il y a quand même BEAUCOUP de documents et ça spam un peu quand tout s'exécute.

    J'ai utilisé ceci comme méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Diagnostics.Process.Start(link);

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 366
    Points
    5 366
    Par défaut
    Cela doit être possible avec Selenium si je ne dis pas de bêtise

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par popo Voir le message
    Cela doit être possible avec Selenium si je ne dis pas de bêtise
    Je ne peux pas utiliser d'autres bibliothèques tierces étant donné que je suis dans une infrastructure d'entreprise et ducoup je dois utiliser les mêmes technologies que l'infra.

    Est-ce qu'il ne serait pas possible de réutiliser la méthode de téléchargement pour y télécharger les matchs de l'expression régulière et non pas la page Download.aspx ?

    Voici mon code complet si besoin :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Text.RegularExpressions;
    using ICSharpCode.SharpZipLib.Core;
    using ICSharpCode.SharpZipLib.Zip;
     
    namespace PrepareDocForExternalUse
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Demande à l'utilisateur le chemin absolu d'un fichier ODT
                Console.WriteLine("Merci de renseigner le chemin absolu d'un fichier ODT:");
                string odtFilePath = Console.ReadLine();
     
                // Lis le contenu du fichier ODT
                byte[] content = File.ReadAllBytes(odtFilePath);
                MemoryStream ms = new MemoryStream();
                ms.Write(content, 0, content.Length);
                ZipFile zf = new ZipFile(ms);
                zf.UseZip64 = UseZip64.Off;
                zf.IsStreamOwner = false;
                ZipEntry entry = zf.GetEntry("content.xml");
                Stream s = zf.GetInputStream(entry);
     
                // Convertit le stream en string
                StreamReader reader = new StreamReader(s);
                string contentXml = reader.ReadToEnd();
     
                // Recherche tous les liens qui commencent par "applnet.test.fr"
                string pattern = @"http://applnet\.test\.fr/GetContenu/Download\.aspx\?p1=.*?;p2=.*?;p5=.*?;p6=NOPUB";
                Regex regex = new Regex(pattern);
                MatchCollection matches = regex.Matches(contentXml);
     
                Directory.CreateDirectory(Path.GetDirectoryName(odtFilePath));
     
                // Traite chaque lien trouvé
                foreach (Match match in matches)
                {
                    string link = match.Value;
     
                    string[] parts = link.Split(new string[] { "aspx?" }, StringSplitOptions.None);
                    string queryString = parts[parts.Length - 1];
     
     
                    // Télécharge le document intranet correspondant
                    string newFileName = Path.GetFileName(new Uri(link).LocalPath);
                    string folderName = Path.GetFileNameWithoutExtension(odtFilePath);
                    string subFolderName = "PJ - " + folderName;
                    string localFilePath = "C:/PiecesJointes/";
                    string onlineFilePath = "https://com.test.fr/files/test/test/" + queryString;
                    System.Diagnostics.Process.Start(link);
     
     
                    // Remplace le lien par le chemin du document téléchargé
                    string newLink = localFilePath.Replace("\\", "/");
                    contentXml = contentXml.Replace(link, onlineFilePath);
                }
     
                // Met à jour le content.xml dans le fichier ZIP initial
                byte[] contentXmlBytes = System.Text.Encoding.UTF8.GetBytes(contentXml);
                ms = new MemoryStream();
                zf.BeginUpdate();
     
                // Ajoute le contenu mis à jour au fichier ZIP
                ZipOutputStream zos = new ZipOutputStream(ms);
                zos.UseZip64 = UseZip64.Off;
                zos.IsStreamOwner = false;
     
                // Ajoute l'entrée pour le fichier content.xml
                zos.PutNextEntry(new ZipEntry(entry.Name));
                StreamUtils.Copy(new MemoryStream(contentXmlBytes), zos, new byte[4096]);
     
                // Traite chaque entrée du fichier ODT original
                foreach (ZipEntry origEntry in zf)
                {
                    // Ignore l'entrée pour le fichier content.xml car il a déjà été ajouté
                    if (origEntry.Name == entry.Name) continue;
     
                    // Ajoute l'entrée au nouveau fichier ZIP
                    zos.PutNextEntry(new ZipEntry(origEntry.Name));
                    StreamUtils.Copy(zf.GetInputStream(origEntry), zos, new byte[4096]);
                }
     
                zos.Close();
     
                // Termine la mise à jour du fichier ZIP
                zf.CommitUpdate();
                zf.Close();
     
     
                // Renomme et enregistre le fichier ODT mis à jour
                Guid g = Guid.NewGuid();
                string updatedFilePath = Path.Combine(Path.GetDirectoryName(odtFilePath), g +  "_" + Path.GetFileName(odtFilePath));
                using (FileStream stream = new FileStream(updatedFilePath, FileMode.Create))
                {
                    ms.Position = 0;
                    ms.WriteTo(stream);
                }
                Console.WriteLine("Le fichier ODT a été mis à jour avec succès et enregistré sous le nom : " + updatedFilePath);
                Console.ReadLine();
            }
        }
    }

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    Pourquoi ne pas demander pour Selenium, tu utilises bien un package tierce comme ICSharpCode ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    ICSharpCode est la bibliothèque qu'ils utilisent pour les Zip, et vu que c'est un petit projet d'alternance que je fais, je me vois mal leur demander de rajouter une technologie

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 721
    Points : 5 366
    Points
    5 366
    Par défaut
    Etre en alternance ne t'interdit pas de t'exprimer ou de faire des suggestions.
    Encore moins de poser des questions (surtout lorsqu'elles sont légitimes comme dans le cas présent).

    Selenium est sous licence Apache.
    Cela ne devrait normalement pas poser de problème pour une entreprise utilisant des libraire sous licence MIT (ICSharpCode).
    Mais si tu ne demandes pas, tu va devoir réinventer la roue et tu n'en auras pas le temps avant la fin de ton alternance.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Le problème est que j'ai une deadline qui est demain, et donc je n'aurai pas le temps de leur faire la proposition de cette technologie (je leur en parlerai quand même demain).
    Mais de fait j'aimerai trouver une solution alternative pour palier ce problème avant demain.

  10. #10
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    Une autre solution est de passer par HttpClient pour faire le téléchargement, faire une get sur l'adresse et récupérer le fichier dans un flux qui sera copier dans un fichier
    voir par exemple, en bas de cette page https://codeburst.io/upload-download...c-f29051dea40c

    PS: d'ailleurs WebClient est considéré comme obsolète si tu regardes sa doc, et qu'il est conseillé de passer par HttpClient https://learn.microsoft.com/fr-fr/do...et-7.0#remarks

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    System.Net.Http.HttpClient n'existe pas dans ma version de Visual Studio (2010), .NET 3.5.

    Encore une fois, c'est la version imposée par l'entreprise.

    Je ne m'en sortirai donc jamais...

  12. #12
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    WebRequest pourrait-il faire l'affaire ?

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    Question que l'on a pas posé: avec ton code initial, le fichier récupéré contenait quoi ? si tu en changes l'extension en celle attendue, est-ce que c'est le bon fichier attendu ? et ce serai "juste" un problème avec le nom retenu (mettre un nom simple et incrémenté dans la boucle)

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    Citation Envoyé par Gekidow Voir le message
    WebRequest pourrait-il faire l'affaire ?
    WebClient utilise WebRequest, donc tu peux utiliser WebRequest, il devrait permettre de récupérer des infos sur le fichier aussi

  15. #15
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par umfred Voir le message
    Question que l'on a pas posé: avec ton code initial, le fichier récupéré contenait quoi ? si tu en changes l'extension en celle attendue, est-ce que c'est le bon fichier attendu ? et ce serai "juste" un problème avec le nom retenu (mettre un nom simple et incrémenté dans la boucle)
    Le fichier contenait des conditions etc (le code d'une page web). Donc même si je changeais l'extension je n'aurai pas eu le résultat voulu. Quand j'exécute le programme c'est 128 fichiers pdf qui sont téléchargés.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    J'essaie actuellement d'effectuer le téléchargement avec la méthode HttpWebRequest, dès que je veux exécuter mon programme, j'ai cette erreur : Caractères non conformes dans le chemin d'accès.

    Code log : 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
    L'exception System.ArgumentException n'a pas été gérée
      Message=Caractères non conformes dans le chemin d'accès.
      Source=mscorlib
      StackTrace:
           à System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String[] str)
           à System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
           à System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, AccessControlActions control, String[] pathList, Boolean checkForDuplicates, Boolean needFullPath)
           à System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
           à System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
           à System.IO.FileStream..ctor(String path, FileMode mode)
           à PrepareDocForExternalUse.Program.Main(String[] args)
           à System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           à System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           à System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           à System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           à System.Threading.ThreadHelper.ThreadStart()
      InnerException:

    Voici mon 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
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    using System;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Text.RegularExpressions;
    using ICSharpCode.SharpZipLib.Core;
    using ICSharpCode.SharpZipLib.Zip;
     
    namespace PrepareDocForExternalUse
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Demande à l'utilisateur le chemin absolu d'un fichier ODT
                Console.WriteLine("Merci de renseigner le chemin absolu d'un fichier ODT:");
                string odtFilePath = Console.ReadLine();
     
                // Lis le contenu du fichier ODT
                byte[] content = File.ReadAllBytes(odtFilePath);
                MemoryStream ms = new MemoryStream();
                ms.Write(content, 0, content.Length);
                ZipFile zf = new ZipFile(ms);
                zf.UseZip64 = UseZip64.Off;
                zf.IsStreamOwner = false;
                ZipEntry entry = zf.GetEntry("content.xml");
                Stream s = zf.GetInputStream(entry);
     
                // Convertit le stream en string
                StreamReader reader = new StreamReader(s);
                string contentXml = reader.ReadToEnd();
     
                // Recherche tous les liens qui commencent par "applnet.test.fr"
                string pattern = @"http://applnet\.test\.fr/GetContenu/Download\.aspx\?p1=.*?;p2=.*?;p5=.*?;p6=NOPUB";
                Regex regex = new Regex(pattern);
                MatchCollection matches = regex.Matches(contentXml);
     
                Directory.CreateDirectory(Path.GetDirectoryName(odtFilePath));
     
                // Traite chaque lien trouvé
                foreach (Match match in matches)
                {
                    string link = match.Value;
                    string[] parts = link.Split(new string[] { "aspx?" }, StringSplitOptions.None);
                    string queryString = parts[parts.Length - 1];
     
     
                    // Télécharge le document intranet correspondant
                    string folderName = Path.GetFileNameWithoutExtension(odtFilePath);
                    string subFolderName = "PJ - " + folderName;
                    string fileName = link;
                    string localFilePath = "C:/PiecesJointes/" + fileName;
                    string onlineFilePath = "https://com.test.fr/files/test/test/" + queryString;
     
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link);
                    request.Method = "GET";
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    Stream stream = response.GetResponseStream();
                    byte[] buffer = new byte[4096];
                    int bytesRead = 0;
                    FileStream fileStream = new FileStream(localFilePath, FileMode.Create);
     
                    do
                    {
                        bytesRead = stream.Read(buffer, 0, buffer.Length);
                        fileStream.Write(buffer, 0, bytesRead);
                    } while (bytesRead > 0);
     
                    fileStream.Close();
                    response.Close();
     
     
                    // Remplace le lien par le chemin du document téléchargé
                    string newLink = localFilePath.Replace("\\", "/");
                    contentXml = contentXml.Replace(link, onlineFilePath);
                }
     
                // Met à jour le content.xml dans le fichier ZIP initial
                byte[] contentXmlBytes = System.Text.Encoding.UTF8.GetBytes(contentXml);
                ms = new MemoryStream();
                zf.BeginUpdate();
     
                // Ajoute le contenu mis à jour au fichier ZIP
                ZipOutputStream zos = new ZipOutputStream(ms);
                zos.UseZip64 = UseZip64.Off;
                zos.IsStreamOwner = false;
     
                // Ajoute l'entrée pour le fichier content.xml
                zos.PutNextEntry(new ZipEntry(entry.Name));
                StreamUtils.Copy(new MemoryStream(contentXmlBytes), zos, new byte[4096]);
     
                // Traite chaque entrée du fichier ODT original
                foreach (ZipEntry origEntry in zf)
                {
                    // Ignore l'entrée pour le fichier content.xml car il a déjà été ajouté
                    if (origEntry.Name == entry.Name) continue;
     
                    // Ajoute l'entrée au nouveau fichier ZIP
                    zos.PutNextEntry(new ZipEntry(origEntry.Name));
                    StreamUtils.Copy(zf.GetInputStream(origEntry), zos, new byte[4096]);
                }
     
                zos.Close();
     
                // Termine la mise à jour du fichier ZIP
                zf.CommitUpdate();
                zf.Close();
     
     
                // Renomme et enregistre le fichier ODT mis à jour
                Guid g = Guid.NewGuid();
                string updatedFilePath = Path.Combine(Path.GetDirectoryName(odtFilePath), g +  "_" + Path.GetFileName(odtFilePath));
                using (FileStream stream = new FileStream(updatedFilePath, FileMode.Create))
                {
                    ms.Position = 0;
                    ms.WriteTo(stream);
                }
                Console.WriteLine("Le fichier ODT a été mis à jour avec succès et enregistré sous le nom : " + updatedFilePath);
                Console.ReadLine();
            }
        }
    }
    J'espère pouvoir y arriver soon

  17. #17
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    Vérifie ta variable localFilePath et surtout fileName (vu que tu lui donnes la valeur de link, elle contient assurément des caractères interdits dans les noms de fichier)

  18. #18
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par umfred Voir le message
    Vérifie ta variable localFilePath et surtout fileName (vu que tu lui donnes la valeur de link, elle contient assurément des caractères interdits dans les noms de fichier)
    Effectivement je m'étais trompé je te remercie, je voulais donner la valeur de QueryString plutôt que de link pour la variable fileName.

    Voici le résultat des fichiers obtenus Nom : résultatfichiers.png
Affichages : 80
Taille : 63,1 Ko.

    On tient quelque chose non ?

  19. #19
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 232
    Points : 1 798
    Points
    1 798
    Par défaut
    pas l'impression, les fichiers font tous 18ko et je ne serais pas étonné que ça corresponde à ce que tu avais dans download.aspx précédemment

  20. #20
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2023
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2023
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Est ce que ce ne serait pas parce que l'extension n'est pas prise en compte ducoup tous les fichiers normalement présents dans un fichier ODT ne sont pas là ?

    Mais oui effectivement Download.aspx faisait aussi 18 ko :/

    Edit : C'est le même code à l'intérieur que Download.aspx

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Téléchargement de fichier
    Par casafa dans le forum Web & réseau
    Réponses: 21
    Dernier message: 18/06/2009, 23h34
  2. Réponses: 5
    Dernier message: 08/12/2005, 20h13
  3. Téléchargement de fichiers par HTTP / FTP
    Par Gladiator dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 07/12/2005, 11h28
  4. Réponses: 5
    Dernier message: 05/11/2005, 17h53
  5. [SOAP][XML][C#.NET] Téléchargement de fichiers XML
    Par juniorAl dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/06/2005, 09h35

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