Avatar billede dj_uncas Nybegynder
25. maj 2005 - 21:47 Der er 4 kommentarer og
2 løsninger

Unzippe filer dynamisk

Hejsa

Jeg er i gang med et billedgalleri, hvor man bl.a. skal kunne uploade en .zip fil der så skal unzippes, og alle billederne i filen skal gennem en rezising process. Jeg har set på SharpZibLib komponentet (http://icsharpcode.net/OpenSource/SharpZipLib/Default.aspx), men jeg kan ikke lure de eksempler der følger med! Jeg havde tænkt mig at filen skal unzippes, og der herefter skal køres en løkke med de unzippede filer, hvori rezising skal udføres.
Er der nogen der kan hjælpe mig med et eksempel på hvordan jeg gør dette?
Avatar billede arne_v Ekspert
25. maj 2005 - 21:51 #1
et unzip eksempel:

using System;
using System.Collections;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;

class MainClass
{
    public static void Main(string[] args)
    {
        ZipFile zf = new ZipFile(@"C:\temp\test.zip");
        IEnumerator e = zf.GetEnumerator();
        while(e.MoveNext())
        {
            ZipEntry ze = (ZipEntry)e.Current;
            Stream istm = zf.GetInputStream(ze);
            Stream ostm = new FileStream(@"C:\temp\" + ze.Name, FileMode.CreateNew, FileAccess.Write);
            byte[] b = new byte[100000];
            int n;
            while((n = istm.Read(b, 0, b.Length)) > 0)
            {
                ostm.Write(b, 0, n);
            }
        }
        zf.Close();
    }
}
Avatar billede burningice Nybegynder
25. maj 2005 - 23:14 #2
ja... mit eksempel ligner meget arnes:

private void OpenZipFileAndSavePictures(Stream s)
        {
            ZipInputStream zipStream = new ZipInputStream(s);
                       
            ZipEntry zipEntry;

            while ((zipEntry = zipStream.GetNextEntry()) != null)
            {
                int size = 2048;
                byte[] data = new byte[size];

                MemoryStream ms = new MemoryStream();

                while (true)
                {
                    size = zipStream.Read(data, 0, data.Length);

                    if (size > 0)
                    {
                        ms.Write(data, 0, size);
                    }
                    else
                    {
                        break;
                    }
                }

                byte[] b = ms.ToArray();
                                       
                SavePicture(b);
            }
        }

        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (RequestHelper.Event == null)
            {
                return;
            }

            if (txtFile.PostedFile == null)
            {
                return;
            }

            System.Web.HttpPostedFile file = txtFile.PostedFile;

            if (file.FileName.ToLower().IndexOf(".jpg") > -1)
            {
                Stream s = file.InputStream;

                byte[] b = new byte[s.Length];
                s.Read(b, 0, b.Length);

                SavePicture(b);
            }
            else if (file.FileName.ToLower().IndexOf(".zip") > -1)
            {
                OpenZipFileAndSavePictures(file.InputStream);
            }
            else
            {
                throw new Exception("Du skal uploade enten en jpg eller en zipfil");
            }
        }

        private void SavePicture(byte[] b)
        {
            string comments = txtComments.Text;
           
            Picture pic = new Picture();

            pic.Comments = comments;
            pic.ParentEvent = RequestHelper.Event;
            pic.PictureData = b;

            pic.Create();
        }

hvor at Picture er en klasse jeg selv har lavet som resizer og gemmer billedet på harddisken i Create()-metoden.
Avatar billede dj_uncas Nybegynder
29. maj 2005 - 23:36 #3
ja, det ser jo godt nok ud, og det virker også nu.. Tak for hjælpen til jer begge! Smider i et svar hver?
Avatar billede arne_v Ekspert
29. maj 2005 - 23:39 #4
ok
Avatar billede burningice Nybegynder
29. maj 2005 - 23:45 #5
.
Avatar billede dj_uncas Nybegynder
30. maj 2005 - 00:35 #6
arne får 20 og burningice får 40, da det er burningice's bud der var mest konkret, men arne's også hjalp!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester