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 ) 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.
se magari mi dici chi sei e su che hosting lo stai testando vediamo
allora, sono su aruba in hosting windows.
in ogni caso, oggi sono riuscito a farlo funzionare...grazie.
Molto carino veramente complimenti!
'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?
prova ad usare semplicemente request("path")
e passargli ?path=
cmq magari mandami una email
PS: grazie mille per l'aiuto!!!!!!
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
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
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
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!
- 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
.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
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!
Quando invio il file mi dice che l'operazione e' stata effettuata con successo ma sul server non c'e' nulla!
Puoi aiutarmi?
Hai qualche script per la compressione
in asp o asp.net senza delle dll?
Senza DLL non ho nulla e non credo che esista...però avevo cercato a suo tempo...quindi magari ora si sono evoluti.
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.
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"))
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
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)
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")
< 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>
Grazie davvero, e ancora complimenti!
L'indirizzo IP del mittente viene registrato, in ogni caso si raccomanda la buona educazione.