Muy buen código asp. Este método no se recomienda para la compresión de archivos grandes, es fácil comprimir algunos archivos pequeños.
<%@ Idioma=VBScript %>
<% Opción Explícita %>
<!--#include file=asptar.asp-->
<%
Respuesta.Buffer = Verdadero
Respuesta.Borrar
Dim Co,Temp,T,x,i,fsoBrowse,theFolder,TheSubFolders,FilePath,s,PH,objTar
Co=0
PH=./UpFile 'Ruta del archivo' comprime todos los archivos en Upfile
Establecer objTar = Nuevo Tarball
objTar.TarFilename=LvBBS_UpdateFile.rar 'Nombre del paquete
objTar.Path=PH
establecer fsoBrowse=CreateObject(Scripting.FileSystemObject)
Establecer theFolder=fsoBrowse.GetFolder(Server.Mappath(PH))
Establecer theSubFolders = theFolder.SubFolders
Para cada T en la carpeta.Archivos
Temp= Temp & T.Nombre & |
Co=Co+1
Próximo
Para cada x en las subcarpetas
Para cada i en X.Files
Temp= Temp & X.Nombre&/&i.Nombre&|
Co=Co+1
Próximo
Próximo
Si Co<1 entonces
Response.Write Actualmente no hay ningún archivo actualizable para descargar.
'objTar.AddMemoryFile Sorry.txt,¡No es archivo!
Demás
Temp=Izquierda(Temp,Len(Temp)-1)
FilePath=Dividir(Temp,|)
Para s=0 a Ubound(FilePath)
objTar.AddFile Server.Mapppath(PH&/&FilePath(s))
Próximo
Si Response.IsClientConnected entonces
objTar.WriteTar
Respuesta.Flush
Terminar si
Terminar si
Establecer ObjTar = Nada
Establecer fsoBrowse= Nada
Establecer la carpeta = Nada
Establecer theSubFolders = Nada
%>
asptar.asp
<%
' Creador de UNIX Tarball
' =====================
' Autor: Chris Leer
' Versión: 1.0.1
' =====================
'
' Esta clase proporciona la capacidad de archivar varios archivos juntos en un solo
'archivo distribuible llamado tarball (TAR en realidad significa Tape ARchive).
' Estos son archivos UNIX comunes que contienen datos sin comprimir.
'
' Entonces, ¿para qué sirve esto? Bueno, te permite combinar eficazmente varios
' archivos en un solo archivo para descargar. Los archivos TAR son legibles y extraíbles.
' mediante una amplia variedad de herramientas, incluido el ampliamente distribuido WinZip.
'
' Este script puede incluir dos tipos de datos en cada archivo, datos de archivos leídos desde un disco,
' y también cosas directamente desde la memoria, como desde una cadena. Los archivos admiten archivos.
' una estructura binaria, por lo que puede almacenar archivos ejecutables si es necesario, o simplemente almacenar
' texto.
'
' Esta clase fue desarrollada para ayudarme con algunos proyectos y ha crecido con cada
'Implementación Actualmente uso esta clase para almacenar datos XML con fines de archivo.
', lo que me permite capturar cientos de archivos XML creados dinámicamente en una sola descarga.
'
'Hay un pequeño número de propiedades y métodos, que se describen en el
'Documentación adjunta.
'
Clase Tarball
Public TarFilename ' Nombre de archivo tarball resultante
ID de usuario público ' ID de usuario de UNIX
Nombre de usuario público 'Nombre de usuario de UNIX
ID de grupo público 'ID de grupo UNIX
Public GroupName 'Nombre del grupo UNIX
Permisos públicos 'Permisos UNIX
Public BlockSize 'Tamaño de bytes de bloque para el tarball (predeterminado=512)
Public IgnorePaths ' Ignora las rutas proporcionadas para la salida tarball
Public BasePath ' Inserta una ruta base con cada archivo
Camino público
'Almacenamiento de información de archivos
Archivos obj privados, nombre de archivo Tmp
Archivos de memoria obj privados
'Subs de administración de listas de archivos, cosas muy básicas
Public Sub AddFile(sFilename)
objFiles.Agregar sFilename,sFilename
Subtítulo final
Public Sub RemoveFile(sFilename)
objFiles.Eliminar sFilename
Subtítulo final
Public Sub AddMemoryFile(sFilename,sContents)
objMemoryFiles.Agregar sFilename,sContents
Subtítulo final
Sub público RemoveMemoryFile(sFilename)
objMemoryFiles.Remove sFilename
Subtítulo final
'Envía el tarball al navegador
Subescritura públicaTar()
Atenuar objStream, objInStream, lTemp, aFiles
Establecer objStream = Server.CreateObject(ADODB.Stream) ' La corriente principal
Set objInStream = Server.CreateObject(ADODB.Stream) ' El flujo de entrada para datos
objStream.Tipo = 2
objStream.Charset = x-ansi ' Buen y antiguo ASCII extendido
objStream.Open
objInStream.Tipo = 2
objInStream.Charset = x-ansi
'Primero revisa todos los archivos almacenados en el disco.
aFiles = objFiles.Items
Para lTemp = 0 a UBound(aFiles)
objInStream.Open
objInStream.LoadFromFile aFiles(lTemp)
objInStream.Posición = 0
'Exportar archivo aFiles(lTemp),objStream,objInStream
TmpFileName = reemplazar (aFiles(lTemp),Server.Mappath(Ruta)&/,)
Exportar archivo TmpFileName,objStream,objInStream
objInStream.Cerrar
Próximo
'Ahora agrega cosas de la memoria
aFiles = objMemoryFiles.Keys
Para lTemp = 0 a UBound(aFiles)
objInStream.Open
objInStream.WriteText objMemoryFiles.Item(aFiles(lTemp))
objInStream.Posición = 0
Exportar archivo aFiles(lTemp),objStream,objInStream
objInStream.Cerrar
Próximo
objStream.WriteText Cadena (Tamaño de bloque, Chr (0))
'Rebobinar la corriente
' Recuerde volver a cambiar el tipo a binario; de lo contrario, la escritura se truncará
'más allá del primer carácter de cero bytes.
objStream.Posición = 0
objStream.Tipo = 1
' Configura todas las cosas del navegador
Response.AddHeader Contenido-Disposición, nombre de archivo = & TarFilename
Response.ContentType = aplicación/x-tar
Respuesta.BinaryWrite objStream.Read
' Ciérralo y vete a casa.
objStream.Cerrar
Establecer objStream = Nada
Establecer objInStream = Nada
Subtítulo final
' Crea un encabezado para cada archivo y envía el contenido del archivo
SubexportFile privado (sFilename,objOutStream,objInStream)
Atenuar lInicio, lSuma, lTemp
lStart = objOutStream.Position 'Registra dónde estamos
Si IgnorePaths entonces
' Ignoramos cualquier ruta que tenga el prefijo de nuestros nombres de archivos.
lTemp = InStrRev(sNombre de archivo,/)
si lTemp <> 0 entonces
sFilename = Right(sFilename,Len(sFilename) - lTemp)
terminar si
sFilename = BasePath y sFilename
Terminar si
' Construimos el encabezado, todo es ASCII en octal excepto los datos
objOutStream.WriteText Left(sFilename & String(100,Chr(0)),100)
objOutStream.WriteText 100 & Right(000 & Oct(Permisos),3) & & Chr(0) 'Modo de archivo
objOutStream.WriteText Right(String(6, ) & CStr(UserID),6) & & Chr(0) 'uid
objOutStream.WriteText Right(String(6, ) & CStr(GroupID),6) & & Chr(0) 'gid
objOutStream.WriteText Right(String(11,0) & Oct(objInStream.Size),11) & Chr(0) 'tamaño
objOutStream.WriteText Right(String(11,0) & Oct(dateDiff(s,1/1/1970 10:00,now())),11) & Chr(0) 'mtime (Número de segundos desde las 10 a. m. en el 1 de enero de 1970 (¿las 10 a. m., correcto?)
objOutStream.WriteText 0 & String(100,Chr(0)) 'chksum, escriba la bandera y el nombre del enlace, escriba todos los espacios en blanco para que la suma de verificación real se calcule correctamente
objOutStream.WriteText ustar & Chr(0) 'magia y versión
objOutStream.WriteText Left(Nombre de usuario y cadena(32,Chr(0)),32) 'uname
objOutStream.WriteText Left(GroupName & String(32,Chr(0)),32) 'gname
objOutStream.WriteText 40 & String(4,Chr(0)) 'devmayor, devmenor
objOutStream.WriteText String(167,Chr(0)) 'prefijo y líder
objInStream.CopyTo objOutStream 'Envía los datos a la secuencia
si (objInStream.Size Mod BlockSize) > 0 entonces
objOutStream.WriteText String(BlockSize - (objInStream.Size Mod BlockSize),Chr(0)) 'Relleno hasta el límite de bytes del bloque más cercano
terminar si
' Calcula la suma de comprobación del encabezado
lSuma = 0
objOutStream.Position = lInicio
Para lTemp = 1 a BlockSize
lSuma = lSuma + (Asc(objOutStream.ReadText(1)) y &HFF&)
Próximo
'Insértalo
objOutStream.Position = lInicio + 148
objOutStream.WriteText Right(String(7,0) & Oct(lSum),7) & Chr(0)
'Ir al final de la secuencia
objOutStream.Position = objOutStream.Tamaño
Subtítulo final
'Comienza todo
Subclase privada_Initialize()
Establecer objFiles = Server.CreateObject(Scripting.Dictionary)
Establecer objMemoryFiles = Server.CreateObject(Scripting.Dictionary)
Tamaño de bloque = 512
Permisos = 438' UNIX 666
ID de usuario = 0
Nombre de usuario = raíz
ID de grupo = 0
Nombre del grupo = raíz
Ignorar rutas = falso
rutabase =
TarFilename = nuevo.tar
Subtítulo final
Subclase privada_Terminar()
Establecer objMemoryFiles = Nada
Establecer objFiles = Nada
Subtítulo final
Fin de clase
%>