0
votes

Comment décoder un fichier zip de base codé64 sur un nouveau fichier ZIP?

J'essaie de créer un fichier zip d'une chaîne de base codée64, mais je suis bloqué pour obtenir les fichiers de la chaîne.

J'ai pu créer le fichier zip en dehors de celui-ci, mais je ne vois pas le fichier qui devrait y être. p>

mon code jusqu'à présent: p>

public static void Main(string[] args)
{
    IConfiguration config = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json", false, true)
        .Build();

    var fileName = args[0];
    var path = $"{config["zipPath"]}\\{fileName}";

    byte[] zipBytes = Convert.FromBase64String(args[1]);
    using(var memoryStream = new MemoryStream(zipBytes))
    {
        // without this I can't open my zip file
        using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
        {
        }

        using (var fileStream = new FileStream(path, FileMode.Create))
        {
            memoryStream.Seek(0, SeekOrigin.Begin);
            memoryStream.CopyTo(fileStream);
        }
   }
}


5 commentaires

Qu'est-ce qu'en args [1] ? la chaîne de base64? et ce qui est dans args [0] ???


@Falcoalexander args [0] = le nom du fichier zip, args [1] = la chaîne de base64 du fichier zip codé


Je ne peux pas très suivre ... Vous devez créer un fichier Temp avec la chaîne de base64 et ce fichier doit être dans un nouveau fichier .zip? Ensuite, vous êtes manifestement manquant qc.


@Falcoalexander J'ai juste besoin du fichier zip et je veux que ce soit identique au fichier zip d'origine codé pour base64, y compris les fichiers dans le fichier ZIP d'origine.


Dupliqué possible de Decode Base64 en C # ou Java


3 Réponses :


0
votes

Lire tout le texte du fichier:

Exemple: p> xxx pré>

puis activer la chaîne de base64, dans le fichier texte, dans les octets p>

Exemple: P> xxx pré>

alors vous pouvez écrire ces octets à un fichier zip p>

exemple: p> xxx pré>

Si vous souhaitez extraire la mémoire, chargez-le dans une exemple MemorMetream P>

Exemple: P>

using (var compressedStream = new MemoryStream(bytes2))
{
    using (FileStream decompressedFileStream = File.Create(@"C:\demofile_installer.msi"))
    {
        using (GZipStream decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
        {
            decompressionStream.CopyTo(decompressedFileStream);
        }
    }
}


1 commentaires

La base64 est déjà un zip. J'ai besoin de créer une fermeture à glissière. Je ne reçois pas les fichiers qu'il contient séparément



1
votes

Peu importe le tout, quel type de fichier vous obtenez, car vous recevez une représentation binaire et un nom de fichier. Il peut s'agir d'un .jpg code>, d'un disque .vhd code> disque virtuel, d'une base de données .mdb code>, peu importe.

Pour que vous puissiez omettre le MemitStream et TheZiparchive, vous écrivez simplement les données binaires dans un fichier avec une extension .zip: p> xxx pré>

(j'ai créé une chaîne de base64 à partir d'un .zip avant) P>

var path = @"c:\temp\import.zip";
    string base64 = "";

    using (FileStream zip = new FileStream(path, FileMode.Open))
    {
        var zipBytes = new byte[zip.Length];
        zip.Read(zipBytes,0,(int)zip.Length);
        base64 = Convert.ToBase64String(zipBytes);
    }


3 commentaires

Cela semble créer une nouvelle entrée, ce que je veux, c'est avoir les entrées originales de mon fichier ZIP d'origine


De toute évidence, votre question est très peu claire, voir aussi l'autre réponse? Aucune idée de ce que vous essayez d'atteindre ...


Oui, étrange, mais je pense que je l'ai eu. Êtes-vous sûr que la chaîne BAS64 que vous avez est correcte? Votre code a l'air bien pour cela, même si je ne comprends pas l'utilisation de zipararchive .



1
votes

Ma suggestion est d'utiliser la méthode zipfile CreatefromDirectory

public static void Main(string[] args)
{
    IConfiguration config = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json", false, true)
        .Build();

    var fileName = args[0];
    var path = $"{config["zipPath"]}\\{fileName}";
    string extractPath = @"c:\users\exampleuser\extract";

    byte[] zipBytes = Convert.FromBase64String(args[1]);
    using(var memoryStream = new MemoryStream(zipBytes))
    {
        using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Read))
        {
            archive.ExtractToDirectory(extractPath);
        }

        ZipFile.CreateFromDirectory(extractPath, path);
   }
}


0 commentaires