Avatar billede hlt Juniormester
14. september 2010 - 15:12 Der er 17 kommentarer og
1 løsning

Zip en mappe på webserver

hej,
Jeg er på udkig efter noget kode der kan zippe en mappe på en webserver og downloade den til en klient.
jeg har kigget på lidt forskelligt, men jeg synes ikke rigtigt at jeg kan få det til at virke. Og jeg vil meget gerne have det i vb. Er ikke helt så skarp i C#
Håber der er nogen derude der har lidt kode de vil dele ;-)
Mvh
Henrik
Avatar billede arne_v Ekspert
14. september 2010 - 15:23 #1
Jeg kan godt lide SharpZipLib.

Det kan sagtens bruges i VB.NET.

Du skal nok vaere forberedt paa at security kan drille lidt.

Kode fragment:

        Dim zos As ZipOutputStream = New ZipOutputStream(New FileStream(zipfnm, FileMode.Create))
...

            Dim fs As FileStream = New FileStream(fnm, FileMode.Open)
            Dim b(fs.Length) As Byte
            fs.Read(b, 0, b.Length)
            fs.Close
            Dim ze As ZipEntry = New ZipEntry(fnm)
            zos.PutNextEntry(ze)
            zos.Write(b, 0, b.Length)
...
        zos.Finish
        zos.Close
Avatar billede hlt Juniormester
14. september 2010 - 15:44 #2
Jeg har hentet SharpZipLib og lagt dll filen i min Bin mappe. Men når jeg bruger koden, for jeg fejl i ZipOutputStream og ZipEntry.
Avatar billede arne_v Ekspert
14. september 2010 - 15:53 #3
Har du de rette Imports saetninger?
Avatar billede arne_v Ekspert
14. september 2010 - 15:53 #4
Imports ICSharpCode.SharpZipLib.Zip
Avatar billede hlt Juniormester
14. september 2010 - 16:14 #5
Argghh, selvfølgelig. det virker fint nu. Altså bortset fra at jeg får en sikkerhedsfejl. Hvordan kan jeg komme ud over det? Mappen der skal zippes er en mappe der er oprettet af systemet. Er der nogen måde hvorpå jeg i koden kan give de rettigheder til mappen der skal til for at få adgang?
Avatar billede arne_v Ekspert
14. september 2010 - 16:22 #6
Det var straks meget mere tricky.

Jeg er ikke ekspert i ASP.NET rettigheder.

Mit gaet vil vaere at:
- du kan zippe filer i web apps eget trae
- der skal aendres i noget server sikkerhed for at give afgang til filer udenfor
Avatar billede hlt Juniormester
14. september 2010 - 16:51 #7
Det er på samme website. Der er givet både skrive og læse rettigheder. Og systemet kan jo sagtens skrive de filer i mappen som zippes.
Avatar billede arne_v Ekspert
14. september 2010 - 17:00 #8
Hvad er den eksakte fejl du faar?
Avatar billede hlt Juniormester
14. september 2010 - 17:54 #9
"Access to the path xxxxx is denied" Og der er givet rettigheder til den pågældende mappe.
Avatar billede arne_v Ekspert
14. september 2010 - 17:56 #10
Bruger du absolut sti eller relativ sti?

Er det zip filen eller de filer som skal pakkes der giver problemet?
Avatar billede hlt Juniormester
14. september 2010 - 18:57 #11
Det er de filer der skal pakkes der giver balladen. Jeg kan se at der bliver oprettet en zip mappe. Den er så bare tom.
Avatar billede hlt Juniormester
14. september 2010 - 19:05 #12
Og så er det en absolut sti. Bruger server.mappath("upload/backup/14-09-2010")
Avatar billede janus_007 Nybegynder
14. september 2010 - 20:24 #13
hmm det kan måske tænkes at der zippes temporært til temp-folderen? ja jeg ved det ikke... blot et forslag :) , men når mappen kan oprettes så har man også rettigheder til at skrive en fil.

Prøv evt. at give .NET-brugeren read/ write adgang til temp-folder på c-drevet.
Avatar billede hlt Juniormester
15. september 2010 - 00:09 #14
Men det er jo ikke den mappe der skrives at der mangler access til??
Og jeg kan ikke give adgang til den mappe. Det eksempel du gav. Har du taget det fra noget C# kode?
Avatar billede janus_007 Nybegynder
15. september 2010 - 00:30 #15
Netop... det er også derfor jeg tænker at SharpZip lægger filen midlertidigt i temp-folderen imens den pakker og bagefter flytter til den mappe som den godt kan oprette. Og det er temp-folderen som der ikke kan skrives til måske!
Avatar billede hlt Juniormester
15. september 2010 - 11:07 #16
jeg fandt noget C# kode som jeg lavede om til VB:
-----------------
' Create zip
Dim f As FastZip = New FastZip
f.CreateZip(targetZipFile, (baseDirectory + sourceDirectory), True, "")

'// Move zip
File.Move(targetZipFile, (baseDirectory + targetZipFile))
'// Check for success
Dim success As Boolean = File.Exists((baseDirectory + targetZipFile))
Return (success)
-----------------
Jeg har så også været nødt til at give full trust til sitet. Hviklet vel ikke er helt godt.
men så virker det. Den laver fint en zip fil. Jeg får dog en fejl med at "The given path's format is not supported". Jeg ved ikke helt hvad der menes med det?

Er det slet ikke muligt at lave det her uden at give full trust?
Avatar billede hlt Juniormester
29. september 2010 - 09:36 #17
Er der en af jer der smider et svar, så jeg kan lukke spørgsmålet.
Avatar billede arne_v Ekspert
29. september 2010 - 14:38 #18
gerne
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
Kurser inden for grundlæggende programmering

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