Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Helinho Coelho

Compactar uma pasta do site utilizando o ASP

Recommended Posts

Olá,

 

Estou precisando entender como funciona o código abaixo para que eu possa, através do ASP, compactar uma pasta inteira que tem somente documentos ".PDF". Eu procurei aqui no fórum e encontrei o tópico do seguinte endereço:

 

http://forum.imasters.com.br/topic/395120-zipar-arquivos-em-asp/

 

Porém, o arquivo "zipado" que é criado pelo código me retorna vazio (sem nenhum arquivo dentro). Alguém pode me ajudar a entender o porque não funciona!?

 

 

1) página "backup.asp"

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="zipar.asp"-->
<%
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set PASTA = FSO.GetFolder(server.mapPath("/arquivos/2012/"))
Set Arquivos = Pasta.Files

Dim objTar
Set objTar = New Tarball

FOR EACH arquivo IN arquivos
objTar.AddFile arquivo
NEXT

objTar.WriteTar
set FSO = nothing

Response.Write "<br>Arquivos copiados e compactados com sucesso!"
%>

 

 

2) página "zipar.asp"

<%
Class Tarball

Public TarFilename
Public UserID
Public UserName
Public GroupID
Public GroupName
Public Permissions
Public BlockSize
Public IgnorePaths
Public BasePath

Private objFiles
Private objMemoryFiles

Public Sub AddFile(sFilename)
objFiles.Add sFilename,sFilename
End Sub

Public Sub RemoveFile(sFilename)
objFiles.Remove sFilename
End Sub

Public Sub AddMemoryFile(sFilename,sContents)
objMemoryFiles.Add sFilename,sContents
End Sub

Public Sub RemoveMemoryFile(sFilename)
objMemoryFiles.Remove sFilename
End Sub

Public Sub WriteTar()
Dim objStream, objInStream, lTemp, aFiles

Set objStream = Server.CreateObject("ADODB.Stream")
Set objInStream = Server.CreateObject("ADODB.Stream")

objStream.Type = 2
objStream.Charset = "x-ansi"
objStream.Open

objInStream.Type = 2
objInStream.Charset = "x-ansi"

aFiles = objFiles.Items

For lTemp = 0 to UBound(aFiles)
objInStream.Open
objInStream.LoadFromFile aFiles(lTemp)
objInStream.Position = 0
ExportFile aFiles(lTemp),objStream,objInStream
objInStream.Close
Next

aFiles = objMemoryFiles.Keys

For lTemp = 0 to UBound(aFiles)
objInStream.Open
objInStream.WriteText objMemoryFiles.Item(aFiles(lTemp))
objInStream.Position = 0
ExportFile aFiles(lTemp),objStream,objInStream
objInStream.Close
Next

objStream.WriteText String(BlockSize,Chr(0))
objStream.Position = 0
objStream.Type = 1

Response.AddHeader "Content-Disposition","filename=" & TarFilename
Response.ContentType = "application/x-zip"
Response.BinaryWrite objStream.Read

objStream.Close
Set objStream = Nothing
Set objInStream = Nothing
End Sub

Private Sub ExportFile(sFilename,objOutStream,objInStream)
Dim lStart, lSum, lTemp

lStart = objOutStream.Position

If IgnorePaths Then
lTemp = InStrRev(sFilename,"\")
if lTemp <> 0 then
sFilename = Right(sFilename,Len(sFilename) - lTemp)
end if
sFilename = BasePath & sFilename
End If

objOutStream.WriteText Left(sFilename & String(100,Chr(0)),100)
objOutStream.WriteText "100" & Right("000" & Oct(Permissions),3) & " " & Chr(0)
objOutStream.WriteText Right(String(6," ") & CStr(UserID),6) & " " & Chr(0)
objOutStream.WriteText Right(String(6," ") & CStr(GroupID),6) & " " & Chr(0)
objOutStream.WriteText Right(String(11,"0") & Oct(objInStream.Size),11) & Chr(0)
objOutStream.WriteText Right(String(11,"0") & Oct(dateDiff("s","1/1/1970 10:00",now())),11) & Chr(0)
objOutStream.WriteText "        0" & String(100,Chr(0))
objOutStream.WriteText "ustar  "  & Chr(0)
objOutStream.WriteText Left(UserName & String(32,Chr(0)),32)
objOutStream.WriteText Left(GroupName & String(32,Chr(0)),32)
objOutStream.WriteText "         40 " & String(4,Chr(0))
objOutStream.WriteText String(167,Chr(0))
objInStream.CopyTo objOutStream

if (objInStream.Size Mod BlockSize) > 0 then
objOutStream.WriteText String(BlockSize - (objInStream.Size Mod BlockSize),Chr(0))
end if

lSum = 0
objOutStream.Position = lStart

For lTemp = 1 To BlockSize
lSum = lSum + (Asc(objOutStream.ReadText(1)) And &HFF&)
Next

objOutStream.Position = lStart + 148
objOutStream.WriteText Right(String(7,"0") & Oct(lSum),7) & Chr(0)

objOutStream.Position = objOutStream.Size
End Sub

Private Sub Class_Initialize()
Set objFiles = Server.CreateObject("Scripting.Dictionary")
Set objMemoryFiles = Server.CreateObject("Scripting.Dictionary")

BlockSize = 512
Permissions = 438

UserID = 0
UserName = "root"
GroupID = 0
GroupName = "root"

IgnorePaths = True
BasePath = "backup_sindrural/"

TarFilename = "bd_sindrural_" & date & "_" & time & ".zip"
'TarFilename = "bd_sindrural_"& day(date) &""& month(date) &""& year(date) &""& hour(time) &""& minute(time) &""& second(time) &".zip"
End Sub

Private Sub Class_Terminate()
Set objMemoryFiles = Nothing
Set objFiles = Nothing
End Sub
End Class
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenho vários code para zipar, mas esse sempre uso

 

zipador.asp

<%
Class Tarball

Public TarFilename
Public UserID
Public UserName
Public GroupID
Public GroupName
Public Permissions
Public BlockSize
Public IgnorePaths
Public BasePath

Private objFiles
Private objMemoryFiles

Public Sub AddFile(sFilename)
objFiles.Add sFilename,sFilename
End Sub

Public Sub RemoveFile(sFilename)
objFiles.Remove sFilename
End Sub

Public Sub AddMemoryFile(sFilename,sContents)
objMemoryFiles.Add sFilename,sContents
End Sub

Public Sub RemoveMemoryFile(sFilename)
objMemoryFiles.Remove sFilename
End Sub

Public Sub WriteTar()
Dim objStream, objInStream, lTemp, aFiles

Set objStream = Server.CreateObject("ADODB.Stream")
Set objInStream = Server.CreateObject("ADODB.Stream")

objStream.Type = 2
objStream.Charset = "x-ansi"
objStream.Open

objInStream.Type = 2
objInStream.Charset = "x-ansi"

aFiles = objFiles.Items

For lTemp = 0 to UBound(aFiles)
objInStream.Open
objInStream.LoadFromFile aFiles(lTemp)
objInStream.Position = 0
ExportFile aFiles(lTemp),objStream,objInStream
objInStream.Close
Next

aFiles = objMemoryFiles.Keys

For lTemp = 0 to UBound(aFiles)
objInStream.Open
objInStream.WriteText objMemoryFiles.Item(aFiles(lTemp))
objInStream.Position = 0
ExportFile aFiles(lTemp),objStream,objInStream
objInStream.Close
Next

objStream.WriteText String(BlockSize,Chr(0))
objStream.Position = 0
objStream.Type = 1

Response.AddHeader "Content-Disposition","filename=" & TarFilename
Response.ContentType = "application/x-zip"
Response.BinaryWrite objStream.Read

objStream.Close
Set objStream = Nothing
Set objInStream = Nothing
End Sub

Private Sub ExportFile(sFilename,objOutStream,objInStream)
Dim lStart, lSum, lTemp

lStart = objOutStream.Position

If IgnorePaths Then
lTemp = InStrRev(sFilename,"\")
if lTemp <> 0 then
sFilename = Right(sFilename,Len(sFilename) - lTemp)
end if
sFilename = BasePath & sFilename
End If

objOutStream.WriteText Left(sFilename & String(100,Chr(0)),100)
objOutStream.WriteText "100" & Right("000" & Oct(Permissions),3) & " " & Chr(0)
objOutStream.WriteText Right(String(6," ") & CStr(UserID),6) & " " & Chr(0)
objOutStream.WriteText Right(String(6," ") & CStr(GroupID),6) & " " & Chr(0)
objOutStream.WriteText Right(String(11,"0") & Oct(objInStream.Size),11) & Chr(0)
objOutStream.WriteText Right(String(11,"0") & Oct(dateDiff("s","1/1/1970 10:00",now())),11) & Chr(0)
objOutStream.WriteText "        0" & String(100,Chr(0))
objOutStream.WriteText "ustar  "  & Chr(0)
objOutStream.WriteText Left(UserName & String(32,Chr(0)),32)
objOutStream.WriteText Left(GroupName & String(32,Chr(0)),32)
objOutStream.WriteText "         40 " & String(4,Chr(0))
objOutStream.WriteText String(167,Chr(0))
objInStream.CopyTo objOutStream

if (objInStream.Size Mod BlockSize) > 0 then
objOutStream.WriteText String(BlockSize - (objInStream.Size Mod BlockSize),Chr(0))
end if

lSum = 0
objOutStream.Position = lStart

For lTemp = 1 To BlockSize
lSum = lSum + (Asc(objOutStream.ReadText(1)) And &HFF&)
Next

objOutStream.Position = lStart + 148
objOutStream.WriteText Right(String(7,"0") & Oct(lSum),7) & Chr(0)

objOutStream.Position = objOutStream.Size
End Sub

Private Sub Class_Initialize()
Set objFiles = Server.CreateObject("Scripting.Dictionary")
Set objMemoryFiles = Server.CreateObject("Scripting.Dictionary")

BlockSize = 512
Permissions = 438

UserID = 0
UserName = "root"
GroupID = 0
GroupName = "root"

IgnorePaths = True
BasePath = "backup_sindrural/"

TarFilename = "bd_sindrural_" & date & "_" & time & ".zip"
'TarFilename = "bd_sindrural_"& day(date) &""& month(date) &""& year(date) &""& hour(time) &""& minute(time) &""& second(time) &".zip"
End Sub

Private Sub Class_Terminate()
Set objMemoryFiles = Nothing
Set objFiles = Nothing
End Sub
End Class
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque que comigo não funciona!? Fiz de acordo com o especificado, mas ele gera um arquivo zipado sem conteúdo algum dentro.

 

Tem alguma coisa que preciso configurar diferente!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique se o path esta correto

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Xanburzum,

 

Já verifiquei e o Path está correto sim... o código até chega a compactar e baixar o arquivo ".zip". Mas quando vou descompactar o arquivo dá o seguinte erro:

 

erro-zip.gif

 

 

Obs: o procedimento certo do código é fazer o download direto do arquivo zipado, ou ele, dá alguma mensagem antes? Pois o meu, ao clicar para abrir a página "backup.asp" ele já começa a fazer o download do arquivo zipado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, dúvida básica: como proteger com senha o arquivo zipado? Sabem aquela opção de colocar uma senha que o winrar te dá na hora de compactar? como fazer isso? Ou seja, para descompactar este arquivo ser obrigado a digitar uma senha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso vai depender do componente que esta usando, se ela aceita esse parâmetro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu to usando justamente a classe que está aí em cima...

Class Tarball

Será que rola?


Desconfiei inicialmente que pudesse ser por aqui:

BlockSize = 512

Permissions = 438

UserID = 0

UserName = "root"

GroupID = 0

GroupName = "root"

 

Mas como não encontrei nenhuma documentação sobre essa classe nas minhas tentativas (método tentativa x erro) não deu certo...

 

Se alguém tiver uma luz... seria muito legal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

me parace que esta classe apenas zipa o arquivo. um componente bom é o Componente ZIP EACompression, mas com suporte apenas a ASP.Net

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.