El uso de tecnología WEB para implementar un sistema de gestión con estructura B/S (navegador/servidor) es la tendencia de desarrollo de la ofimática. Los sistemas de gestión basados en tecnología WEB se han desarrollado rápidamente en los últimos años porque tienen un ciclo de desarrollo corto; son aplicaciones interactivas fáciles de implementar y pueden recopilar, procesar y publicar información de manera rápida y eficiente; La tecnología ASP se ha convertido gradualmente en la herramienta preferida para desarrollar sistemas de gestión debido a su alta eficiencia de desarrollo, buena interactividad y sólida seguridad.
Muchas aplicaciones basadas en WEB implican operaciones de carga de archivos. Las tecnologías de carga de archivos comunes incluyen: basadas en el protocolo HTTP; basadas en componentes de carga de archivos desarrollados por VB (o DELPHI y otros lenguajes de programación basados en tecnología de bases de datos); Estos métodos generalmente requieren que los programadores dominen la tecnología WEB, la tecnología de bases de datos o la tecnología CGI o la tecnología de componentes al mismo tiempo, y tienen requisitos más altos para los programadores. El uso de la tecnología ASP para implementar directamente la función de carga de archivos que presentará este artículo solo requiere que los programadores dominen una única tecnología ASP, lo que reduce en gran medida la dificultad de la programación.
Comparación de varias tecnologías de carga de archivos
1. Basado en el protocolo HTTP
Este método requiere que los programadores utilicen software de terceros, como DELPHI, VB, etc., para realizar primero la programación del protocolo HTTP en la aplicación y luego empaquetar el contenido del archivo. para cargar en el formato del protocolo HTTP y finalmente envía un mensaje de solicitud de carga al servidor WEB para lograr la carga del archivo. Debido a que DELPHI y VB no pueden escribir programas de red WEB completos y solo pueden escribir pequeñas aplicaciones WEB, este método solo se usa para aplicaciones de red con funciones limitadas.
2. Componente de carga de archivos desarrollado en base a VB (o DELPHI, etc.)
Este método utiliza el lenguaje de programación VB (o DELPHI, etc.) para desarrollar componentes del servidor ASP para implementar servicios de carga de archivos específicos. Primero utiliza la función de formulario ASP para cargar archivos (formato binario) desde el cliente al servidor, y luego utiliza componentes desarrollados por VB para procesar los archivos binarios en archivos que se pueden leer y escribir normalmente. Este método requiere que los programadores no solo dominen el lenguaje ASP, sino también que utilicen lenguajes de terceros como VB para la programación de componentes, lo que aumenta la dificultad del desarrollo.
3.
Este método es similar al método anterior basado en tecnología de bases de datos. La diferencia radica en el procesamiento de los archivos binarios cargados. Utiliza una base de datos para guardar archivos binarios. Tanto las bases de datos pequeñas como las grandes proporcionan tipos de datos para almacenar datos binarios. Simplemente almacene los datos en los campos correspondientes en el método Append Chunk. Aunque este método es simple y factible, debido a que el tamaño del archivo cargado cada vez es diferente, causará una gran pérdida de espacio en la base de datos y reducirá la velocidad de acceso a los datos, y el archivo solo se puede cargar en el entorno de la base de datos. causando grandes inconvenientes.
Análisis de ejemplo
Sin embargo, el uso de la tecnología ASP para implementar directamente la función de carga de archivos solo requiere que el programador domine una única tecnología ASP, lo que
reduce en gran medida la dificultad de la programación. A continuación, presentaremos cómo utilizar este método a través de un ejemplo.
1. Formulario de carga de archivos
Primero debe escribir un formulario que pueda proporcionar la función de carga de archivos. El programa es el siguiente:
<Form action="upload.asp" método=post enctype="multipart/form-data">.
Cargar archivo:<Tipo de entrada=nombre de archivo=archivo1><br>
<tipo de entrada=nombre de envío=valor de carga="Cargar">
</form>
Entre ellos, el parámetro enctype se utiliza para configurar el método de codificación MIME del formulario. Al cargar un archivo (o que contiene un cuadro de texto), su atributo debe configurarse en "multipart/form-data". asp es el lado del servidor. El programa ASP que procesa el flujo de archivos binarios recibidos se presentará más adelante en este artículo.
2. Cargar análisis del formato del archivo
Antes de procesar el archivo, primero debemos comprender el formato específico del archivo cargado. Podemos ver su código binario escribiendo el siguiente programa ASP simple:
<%.
tamaño=Request.TotalBytes 'Obtener el tamaño del archivo cargado
filedata=Request.BinaryRead(filesize) 'Obtiene los datos binarios del archivo cargado
Response.BinaryWrite filedata 'Mostrar datos binarios en el navegador
%>
Analice el código binario del archivo cargado que se muestra en el navegador y descubra que el código consta de cuatro partes (si se cargan varios archivos o cuadros de texto al mismo tiempo, los códigos se organizan en el orden de carga, con el mismo formato), y el contenido de cada parte está separado por símbolos de retorno de carro y avance de línea:
1) La primera parte (marca de inicio)
--------------------------7d329631b04d4
2) Parte 2 (Descripción del archivo)
Disposición de contenido: formulario-datos; nombre="archivo1"; nombre de archivo="C:Documentos y configuracionesAdministradorMis documentosInvitación.doc" Tipo de contenido: aplicación/msword
en Por lo tanto , podemos obtener el nombre del archivo y la ruta absoluta del archivo cargado, así como el tipo de archivo. Esta información es esencial para guardar el archivo correctamente.
3) La tercera parte (contenido del archivo)
es el contenido binario del archivo, omitido.
4) Parte 4 (Marca de fin)
--------------------------7d329631b04d4
Veamos el contenido de la Parte 1 y la Parte 4, "-- ------------------------------7d329631b04d4" (el valor es diferente cada vez que lo subes) juega el papel de separador, Marca el principio y el final de un dato (cuando hay varias cargas). En términos de la información necesaria para guardar el archivo, primero debemos obtener el nombre del archivo del "nombre de archivo" de la segunda parte de los datos, luego debemos ubicar correctamente la posición inicial del archivo y finalmente usar la tecnología ASP. para guardar el archivo binario con su nombre de archivo original. Eso es todo. Si se cargan varios contenidos (como varios cuadros de texto y archivos) al mismo tiempo, se procesan de la misma manera. Cada parte del contenido se incluye en el delimitador, pero los cuadros de texto y los archivos se expresan de maneras ligeramente diferentes. Esto se puede hacer analizando específicamente su código binario para comprenderlo.
3. Utilice la tecnología ASP para implementar el almacenamiento de archivos
y cargar el procesamiento de códigos de archivos
. 1) Obtenga el código delimitador
del análisis anterior, ya sabemos que el delimitador juega un papel importante en la división de múltiples segmentos de datos (incluidos cuadros de texto y varios tipos de archivos). ). Como se ha analizado anteriormente, el separador aparece antes del primer símbolo de retorno de carro y avance de línea. Por lo tanto, el código delimitador se puede obtener a través del siguiente programa:
<%
newline=chrB(13) & chrB(10) 'la nueva línea representa el carácter de retorno de carro binario
tamaño=Request.TotalBytes 'filesize es el tamaño del archivo subido
filedata=Request.BinaryRead(filesize) 'filedata son los datos binarios del archivo cargado
divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divisor es el divisor
%>
Nota: Debido a que todos los procesos aquí son códigos de bytes binarios, todas las funciones usan sus versiones binarias con "b" agregada.
2) Obtener el contenido del archivo (o cuadro de texto)
(1) Función preparatoria (convertir una cadena binaria en una cadena)
El contenido del archivo cargado no necesita pasar por el proceso de conversión de binario a cadena y se puede guardar directamente . Sin embargo, si necesita extraer el contenido del cuadro de texto o el nombre del archivo, debe realizar la conversión. Por lo tanto, es necesario escribir una función de conversión universal adecuada para caracteres chinos. El siguiente es el código de función:
Función BtoS (bstr)
Si no es nulo (bstr) entonces
para i = 0 a lenb(bstr) - 1
bchr = midb(bstr,i+1,1)
Si ascb(bchr)>127 Entonces 'los caracteres chinos son bytes dobles, por lo que dos caracteres deben procesarse juntos
temperatura = temperatura&chr(ascw(midb(bstr, i+2, 1)&bchr))
yo = yo+1
Demás
temperatura = temperatura y chr (ascb (bchr))
Terminar si
próximo
Terminar si
BtoS=temperatura
Función final
(2) Obtener el contenido del archivo (o cuadro de texto).
En las aplicaciones WEB reales, la operación de carga puede involucrar múltiples contenidos, como múltiples cuadros de texto, múltiples archivos, etc. Los archivos y los cuadros de texto se distinguen fácilmente. Los datos del archivo contienen la cadena "filename=". Por lo tanto, escribimos la siguiente función general, que se puede utilizar para extraer tanto el contenido del archivo como el contenido del cuadro de texto (se requiere conversión binaria):
Función getdata(datos byval, divisor byval, final) 'los datos representan una cadena binaria el divisor representa la división; símbolo; final representa la posición final de los datos
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'Binario de la cadena "nombre de archivo" express
bncrlf=chrb(13)&chrb(10) 'Carácter de retorno de carro binario
startpos = instrb(datos,divisor)+lenb(divisor)+lenb(bncrlf) 'Posición inicial
endpos = instrb(startpos,data, divider)-lenb(bncrlf) 'Posición final
part1 = midb(data, startpos, endpos-startpos) 'Contenido entre dos separadores
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' Párrafo de descripción antes del contenido
If (instrb(firstline,filename)=0) Entonces 'Si es un cuadro de texto, obtenga el contenido de la cadena del cuadro de texto
stemp=midb(parte1,instrb(parte1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(parte1)-instrb(parte1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(temp)
De lo contrario 'Si es un archivo, obtenga el contenido binario del archivo
Getdata=midb (parte1, instrb (parte1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (parte1)
-instrb(parte1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
Terminar si
Final=pos finales
Función final
Llame a esta función directamente en el programa para obtener el contenido del archivo requerido (o cuadro de texto), como se muestra a continuación:
<%
Contenido=getdata (datos, divisor, posición)
%>
3) La obtención del nombre del archivo se ha analizado antes. El campo "filename=" del flujo de datos del archivo cargado contiene el nombre y la ruta absoluta del archivo. En términos generales, solo necesitamos extraer el nombre del archivo en la ruta. El siguiente es el código del programa:
<%.
namepos=instrrev(B2S(firstline),chr(92)) 'firstline son los datos de la parte de descripción obtenidos anteriormente, chr(92)
expresar"/"
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'Obtener el nombre del archivo
%>
Use ASP para implementar directamente la función de carga de archivos.
Los programadores de ASP tradicionales solo pueden usar el objeto FILESYSTEMOBJECT para mover, copiar, eliminar y otras operaciones en archivos de texto (.txt). los introducidos anteriormente en este artículo. Sin embargo, ahora el objeto ADO.STREAM en ASP puede operar objetos de texto y objetos binarios al mismo tiempo (se puede descargar en http://www.microsoft.com/data ) y puede usarlo para implementar directamente la carga de archivos. función en ASP. A continuación, presentamos su proceso de implementación.
1) Abra el objeto STREAM.
Para el objeto SREAM, si desea guardar el archivo, debe guardar todo el contenido del objeto. Por lo tanto, debemos crear dos (o más) objetos STREAM, uno de los cuales es el flujo de datos de origen, que recibe los datos binarios iniciales, el otro es el flujo de datos de destino, que recibe los datos procesados del flujo de datos de origen, y finalmente; guardar en el archivo deseado.
<%
set str=server.CreateObject("ADODB.Stream") 'str es el flujo de datos de origen
str.Mode=3 'Establece el modo abierto, 3 es legible y escribible
str.Type=1 'Establece el tipo de datos, 1 son datos binarios
str.abierto
set desc=server.CreateObject("ADODB.Stream") 'desc es el flujo de datos de destino
desc.Modo=3
Tipo de descripción=1
desc.Abrir
%>
2) Copiar contenido entre objetos STEAM
En esta parte, debe ubicar el comienzo del archivo en el flujo de datos de origen y averiguar la longitud del contenido del archivo antes de poder copiar correctamente el archivo en el flujo de datos de destino y guardar el archivo. El código del programa es el siguiente:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata es todo el contenido subido
str.Write formdata 'Asignar flujo de datos de origen
str.position=count-lenb(resultado)-2 'la posición apunta al comienzo del archivo
str.copyto desc, lenb(filecotent) 'lenb(filecontent) representa la longitud del archivo
desc.SaveToFile fullpath,2 'Guarda el archivo con la ruta y el nombre especificados en fullpath
%>
3) Cierre el objeto STEAM
Una vez completada la programación, el objeto STEAM debe cerrarse y liberarse, como se muestra a continuación:
<%
Descr. Cerrar
Establecer desc=nada
cerrar
Establecer STR=nada
%>
Resumen
Este artículo proporciona un método para implementar directamente la carga de archivos usando ASP, que se ha aplicado bien en el sistema de gestión de información desarrollado por esta unidad. La práctica ha demostrado que este método es más sencillo y eficaz que varios métodos tradicionales de carga de archivos.