Donachy's Blog

Nessuno è in grado di governare un altro senza il suo consenso.
(Abraham Lincoln)
News Ultimi Articoli Ultimi Tag
 
17/01/2012 - Nuove foto - Capodanno cinese
13/01/2012 - Nuove foto - Perugia
03/01/2012 - Nuove foto - Capodanno 2012
03/01/2012 - Nuove foto - Vari album del 2011
02/05/2011 - Nuove foto - San Francisco
Maria ha taggato una foto
Alberto ha taggato una foto
rodolfo ha taggato una foto
fase ha taggato una foto
isola ha taggato una foto

\\ Home Page : Articolo
mar142007
  ASPX e ZIP
Di donachy (del 14/03/2007 @ 09:53:10, in Software, linkato 7452 volte)

Non sarebbe comodo poter inviare N file sul vostro sito effettuando un solo upload? Beh...si può fare utilizzando un file ZIP che verrà in seguito estratto dove meglio credete


Ho implementato una paginetta che consente, tramite l'uso della dll SharpZipLib di estrarre i file contenuti in uno Zip, dopo averne fatto l'upload. Trovo utilissima questa funzionalità, però ho dovuto lavorare non poco sulla configurazione e ricompilare la libreria (santo opensource : - D ) aggiungendo nel file AssembyInfo il parametro

[assembly:AllowPartiallyTrustedCallers]

per fare l'upload e utilizzare la libreria ho preso spunto da ASPItalia, modificando il codice per poter estrarre anche file che si trovino all'interno di sottocartelle nello ZIP

Il file al momento viene uploadato in /public/temp e i file estratti vengono creati in /public/temp/unzip, tali percorsi pssono essere modificati ma l'importante è che la cartella di base sia /public (per Aruba) o qualsiasi altra cartella con i permessi di scrittura.


Scarica lo ZIP

Articolo Articolo    Storico Storico Stampa Stampa Condividi
 
1
grande !
Di  mago28  (inviato il 14/03/2007 @ 14:49:15)
2
a me non funziona....
Di  Anonimo  (inviato il 04/04/2007 @ 15:50:30)
3
Per anonimo
se magari mi dici chi sei e su che hosting lo stai testando vediamo
Di  donachy  (inviato il 04/04/2007 @ 18:29:52)
4
ciao donachy, sono l'anonimo di ieri...
allora, sono su aruba in hosting windows.
in ogni caso, oggi sono riuscito a farlo funzionare...grazie.
Di  Anonimo  (inviato il 05/04/2007 @ 11:09:56)
5
perfetto mi fa piacere, anche perchè hai la mia stessa configurazione quindi deve funzionare per forza ; - )
Di  donachy  (inviato il 05/04/2007 @ 13:10:26)
6

Ganzo sto' coso : - D

Grande donachy !!!
Di  Sirsly  (inviato il 30/05/2007 @ 18:26:16)
7
Ciao sto cercando di caricare su un dominio aruba il tuo script. Allora ho fatto così, ho creato le cartelle TEMP e UNZIP nella cartella PUBLIC sempre qui ho messo il file UploadAndUnzip.aspx poi ho preso il file web.config e l'ho messo nella root principale infine nella cartella cgi-bin ho estratto la DLL ICSharpCode.SharpZipLib.dll quando vado a chiamare l'upload ricevo errore "Server Error in '/' Application." sulla linea 8 del file web.config , dove sbaglio? Ciao e grazie Fabio
Di  Fabio  (inviato il 05/06/2007 @ 12:14:40)
8
Ok risolto come non detto! : - ) Bastava uploadare la cartella BIN e non mettere la DLL in cgi-bin ... : - )
Molto carino veramente complimenti!
Di  Fabio  (inviato il 05/06/2007 @ 12:42:03)
9
ciao sto cercando rendere dinamico il percorso, ossia nella pagina precedente creo una nuova cartella (es. per data 05062007) quindi devo cambiare questo:
'NOTA: va reso dinamico
strPercorsoFileUpload =server.mappath("/public/temp")
ma non so perchè non accetta ne variabili session ne tantomeno request.querystring... sulla prima non dà errore ma viene ignorata sulla querystring dà un errore in cui dice che non è supportata... te sei riuscito a renderlo dinamico?
Di  Fabio  (inviato il 05/06/2007 @ 16:13:03)
10

prova ad usare semplicemente request("path")

e passargli ?path=

cmq magari mandami una email
Di  achille  (inviato il 06/06/2007 @ 10:23:58)
11
cosa devo tenere del codice per la sola funzione scompa$tta, supponendo che il file.zip su cui lavorare sia già sul server e si chiami sempre nello stesso modo?
Di  Attilio  (inviato il 19/08/2007 @ 14:00:16)
12
un'altra questione: sembra che il processo tenga lockato il file.zip? se non sbaglio, di default viene lasciato sul server....

PS: grazie mille per l'aiuto!!!!!!
Di  Attilio  (inviato il 19/08/2007 @ 14:16:33)
13
Ciao Attilio, allora:

1) la funzione scompatta lavora già sul file presente sul server in quanto l'upload è fatto separatamente tramite la chiamata a riga 105 del codice originale;

2)il file zip è bloccato finchè non viene effettuata la close (riga 67). Successivamente si può scegliere se il file zip deve essere eliminato, rinominato o lasciato sul server in base alle opzioni (true/false) elimina e rinomina passate in scompatta all'atto della chiamata (riga 107)

Spero di esserti stato di aiuto
Di  donachy  (inviato il 23/08/2007 @ 14:57:20)
14
grazie mille, procedo con le mie modifiche, grazie ancora per lo script in generale e per la disponibilità.
Di  Anonimo  (inviato il 24/08/2007 @ 19:05:00)
15
non riesco a fare la chiamata per la sola funzione scompatta...

Sub BtnUp_Click(sender As Object, e As EventArgs)
dim strFile as string
'strFile = inputFile.PostedFile.FileName
'Ricavo il nome del file SENZA percorso.
Dim strNomeFile as string
'strNomeFile = System.IO.Path.GetFileName(strFile)

'FORZO IL NOME DEL FILE.ZIP
strNomeFile ="fotografie.zip"
dim strPercorsoFileUpload,strPercorsoFileUnzip as string

'QUI occorre specificare il path dove viene inviato lo zip
'NOTA: va reso dinamico
strPercorsoFileUpload =server.mappath("/public/temp")

'QUI occorre specificare il path dove vengono estratti i file contenuti nello zip
'NOTA: va reso dinamico
strPercorsoFileUnzip =server.mappath("/public/foto")

'scompatta lo zip
Di  Anonimo  (inviato il 27/08/2007 @ 17:44:28)
16
A me funziona cosi:

Sub BtnUp_Click(sender As Object, e As EventArgs)
Dim strNomeFile as string
strNomeFile = "file.zip"
dim strPercorsoFileUpload,strPercorsoFileUnzip as string
'QUI occorre specificare il path dove si trova lo zip
strPercorsoFileUpload =server.mappath("/public/temp")
'QUI occorre specificare il path dove vengono estratti i file contenuti nello zip
strPercorsoFileUnzip =server.mappath("/public/temp/unzip")
'scompatta lo zip scompatta(strPercorsoFileUnzip,strPercorsoFileUpload & "\" & strNomeFile,false,false)
End Sub

A patto che rimuovi il campi < input type =file dall'html, che lo zip sia presente nella cartella /public/temp e che la cartella /public/temp/unzip esista

Di  donachy  (inviato il 28/08/2007 @ 15:33:28)
17
Ciao!
Era un bel pezzo che stavo cercando un modo per inviare file zip sul server e poi scompattarli... ma non mi funziona!!!

Ho il sito ospitato su uno spazio Windows di Aruba, ho scaricato lo zip con tutti i file.
Ho caricato nella root del sito, il file UploadAndUnzip.aspx (dopo aver opportunamente modificato i percorsi per l'upload e l'unzip). Ho caricato, sempre nella root, il file web.config.
Poi ho caricato il file ICSharpCode.SharpZipLib.dll nella cartella cgi-bin, ma non funziona. Ho provato poi a caricarlo nella cartella bin, ma continua a darmi errore sulla riga 8 di web.config.
Parser Error Message: The format of the file 'ICSharpCode.SharpZipLib' is invalid.

Ho letto il commento di qualcun altro che ha risolto caricando la dll su bin e non su cgi-bin, ma a me neanche così funziona.

Heeeelp!!! Thanx!
Di  Roby  (inviato il 03/12/2007 @ 13:57:58)
18
Ciao Roby, anche io utilizzo Aruba, quello che posso dirti è che la dll DEVE PER FORZA trovarsi nella cartella BIN e non CGI-BIN. Il web.config hai usato quello contenuto nello zip o ne avevi già uno tuo? Inoltre controlla (per sicurezza ma dovrebbe esserlo) che il tuo spazio web sia abilitato per ASP.NET, dal pannello di controllo su aruba.
Di  donachy  (inviato il 03/12/2007 @ 14:45:10)
19
Ciao, grazie per la risposta! ; - )

- Ho caricato la cartella bin, con tutto il suo contenuto, nella root del mio sito.
- Ho caricato il tuo web.config.
- Da pannello di controllo di Aruba mi dice: .NET Framework version: 1.1.4322.2407
Sistema Operativo: Microsoft Windows 2003
IIS: Microsoft-IIS/6.0
MDAC: 2.82.3959.0

Mi sembra che sia tutto a posto, ma continua a non funzionare.

Hai qualche idea?

Grazie!
Ciao
Di  Roby  (inviato il 03/12/2007 @ 15:48:42)
20
ciao, il mio ha il
.NET Framework version: 2.0.50727.832 e quindi non vorrei che fosse proprio questo il problema, può essere che il .NET 1 non lo supporti, non so darti altre spiegazioni. Comunque prova ad aprire un ticket su aruba chiedendo se pensano di aggiornare il framework
Di  donachy  (inviato il 03/12/2007 @ 19:07:23)
21
OK, grazie. ; - )
Di  Roby  (inviato il 04/12/2007 @ 00:03:05)
22
Abbiamo scoperto che il sito era ospitato su un server con Windows 2000!!!
Venerdì mi spostano il sito su un server con Windows 2003.

Pare inoltre che le info del pannello di controllo di Aruba non siano affidabili (mi diceva che ero su un server con Windows 2003...

Se tutto va bene, lunedì riproverò il tuo script.

Ciao! ; - )
Di  Roby  (inviato il 05/12/2007 @ 21:44:15)
23
ok, fammi sapere ; - )
Di  donachy  (inviato il 06/12/2007 @ 12:25:05)
24
grande!!!
Di  Andrew  (inviato il 28/08/2008 @ 21:57:57)
25
Io sono sotto aruba.
Quando invio il file mi dice che l'operazione e' stata effettuata con successo : - D ma sul server non c'e' nulla! E - )
Puoi aiutarmi? ; - )
Di  Alme90  (inviato il 05/09/2008 @ 23:45:28)
26
; - ) ; - ) ; - ) ; - ) ; - ) ; - ) ; - ) ; - )
Hai qualche script per la compressione
in asp o asp.net senza delle dll?
; - ) ; - ) ; - ) ; - )
Di  Alme90  (inviato il 05/09/2008 @ 23:53:40)
27
se stai su aruba e non hai cambiato le cartelle dovrebbe funzionare. La DLL va messa nella cartella bin e non cgi-bin, e il web.config nella root. Verifica anche che versione hai di .NET dal pannello di controllo di aruba (io l'ho testato sulla 2). Però se non ti compare nessun errore dovrebbe funzionare. Che cosa invii dentro al file zip? alcuni file (tipo script) non possono essere inviati su aruba.
Senza DLL non ho nulla e non credo che esista...però avevo cercato a suo tempo...quindi magari ora si sono evoluti.
Di  donachy  (inviato il 07/09/2008 @ 09:59:43)
28
!!! ATTTENZIONE !!!

Se installate il modulo cosi' com'e' create un buco di sicurezza mostruoso sul vostro sito!

Chiunque puo' uploadare un qualsiasi eseguibile sapendo perfettamente da dove mandarlo e dove finira'.

Rinominate quantomeno il file aspx o metteteci dentro un controllo di login.


Di  Sesamo  (inviato il 25/09/2008 @ 10:08:42)
29
Beh....non è QUESTO script che crea il buco di sicurezza ma semmai una funzione upload in generale. Si presuppone che chi voglia utilizzarlo non lo lasci alla mercè di chiunque.

Comunque hai fatto bene a ricordarlo

basterebbe comunque aggiungere un parametro password da testare direttamente all'interno della pagina, oppure modificare la riga 38 aggiungendo in and un controllo sull'estensione dei file interni allo zip (<> js, asp, php, html etc)

per esempio (da aggiungere le altre estensioni) con
if (Path.GetFileName(theEntry.Name)<> "" AND not Path.GetFileName(theEntry.Name).ToLower.EndsWith(".js"))
Di  donachy  (inviato il 25/09/2008 @ 16:34:13)
30
Ciao,
complimenti per il tuo lavoro, l'ho testato personalmente sul mio sito su aruba e funziona alla grande!

Non ho capito però come fare per far sì che digitando l'indirizzo web sia effettuato automaticamente l'unzip di uno zip già presente.

Io ho

1)modificato la riga 94 da così:
strNomeFile = System.IO.Path.GetFileName(strFile)
a così:
strNomeFile = "pippo.zip"

2) ho rimosso la riga 108 ()

3)ho precedentemente caricato nella cartella public/temp il file pippo.zip

Ricevo questo errore Server Error in '/' Application.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: BC30451: Name 'inputFile' is not declared.

Source Error:

Line 89: Sub BtnUp_Click(sender As Obje
Di  Alessio  (inviato il 16/10/2008 @ 09:32:34)
31
leggi il commento n.16, eliminando l'upload e quindi il campo relativo a inputFile ti va in errore se non fai quelle modifiche.

poi se vuoi scatenare l'evento senza nessun click puoi eliminare anche la sub BtnOnClick e richiamare in modo diretto la sub scompatta

scompatta(server.mappath(pathForUnzip),server.mappath(pathZipFile),false,false)
Di  donachy  (inviato il 16/10/2008 @ 12:17:23)
32
Effettivamente non avevo tolto l'upload!

Funziona, ma non ho capito cosa devo fare per far sì che digitando l'indirizzo web avvenga tutto automaticamente ...

Devo commentare qualcosa qui?:
Sub BtnUp_Click(sender As Object, e As EventArgs)
dim strFile as string
'strFile = inputFile.PostedFile.FileName
'Ricavo il nome del file SENZA percorso.
Dim strNomeFile as string
strNomeFile = "pippo.zip"
dim strPercorsoFileUpload,strPercorsoFileUnzip as string
'QUI occorre specificare il path dove viene inviato lo zip
'NOTA: va reso dinamico
strPercorsoFileUpload =server.mappath("/public/temp")
'QUI occorre specificare il path dove vengono estratti i file contenuti nello zip
'NOTA: va reso dinamico
strPercorsoFileUnzip =server.mappath("/public/temp/unzip")
Di  Alessio  (inviato il 16/10/2008 @ 13:13:21)
33
modifica il body cosi... (ho messo uno spazio subito dopo i tag "<", per questioni di visualizzazione, che devi eliminare)

< body runat="server" onload="BtnUp_Click">
< p align="center">
< asp:Label id="lblZIP" runat="server" font-names="Verdana" font-size="XX-Small" font-bold="True">
< /asp:Label>
< br />
< /p>
< /body>
Di  donachy  (inviato il 16/10/2008 @ 14:40:28)
34
Che spettacolo!!!

Grazie davvero, e ancora complimenti!
Di  Alessio  (inviato il 16/10/2008 @ 15:02:15)
35
super!!
Grazie davvero, e ancora complimenti!
Di  marg°t  (inviato il 21/04/2011 @ 15:25:44)
Testo (max 1000 caratteri)
Clicca per inserire uno dei seguenti smileys:
Smile arrabbiato Smile assonnato Smile bacio Smile diavolo Smile linguaccia Smile morto Smile occhiali Smile occhiolino Smile risatona Smile shockato Smile sorriso Smile timido Smile triste
Nome
e-Mail / Link

non compilare questo campo(ANTISPAM).

Disclaimer
L'indirizzo IP del mittente viene registrato, in ogni caso si raccomanda la buona educazione.