<Acción del formulario=método upload.asp=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=carga>
</formulario>
Entre ellos, el parámetro enctype se usa para configurar el método de codificación MIME del formulario. Al cargar un archivo (o que contiene un cuadro de texto al mismo tiempo), su atributo debe configurarse en multipart/form-data. El archivo binario del lado del servidor recibido. El programa ASP para el procesamiento de secuencias se presentará más adelante en este artículo.
2. Cargar análisis de formato de 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
%>
Al analizar el código binario del archivo cargado que se muestra en el navegador, encontramos 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 se ingresa usando Separado por caracteres de nueva línea:
1) La primera parte (bandera de salida)
--------------------------7d329631b04d4
2) Parte 2 (Descripción del documento)
Disposición de contenido: datos de formulario; nombre=archivo1; nombre de archivo=C:/Documentos y configuraciones/Administrador/Mis documentos/Invitación.doc Tipo de contenido: aplicación/msword
Aquí 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) Parte 3 (Contenido del documento)
Es decir, se omite el contenido binario del archivo.
4) Parte 4 (marca final)
--------------------------7d329631b04d4
Combinando el contenido de la primera y cuarta parte, -----------------------7d329631b04d4 (el valor es diferente cada vez que se sube ) Mismo) desempeña el papel de un separador, que marca el principio y el final de un dato (cuando hay varios contenidos cargados). En términos de la información necesaria para guardar el archivo, primero debemos obtener el nombre del archivo a partir 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. 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.
Procesamiento del código del archivo cargado
1) Obtener el código delimitador
Del análisis anterior, ya sabemos que los separadores desempeñan un papel importante al dividir 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 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 aquí estamos tratando con código de bytes binario, todas las funciones usan su versión binaria, con b agregado.
2) Obtener el contenido del archivo (o cuadro de texto)
(1) Función preparatoria (convertir cadena binaria en 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 aplicaciones WEB reales, la operación de carga puede implicar 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(byval data, byval divider, final) 'los datos representan la cadena binaria; el divisor representa el separador final;
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'Representación binaria de la cadena filename=
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) Then '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
Al llamar a esta función directamente en el programa, puede obtener el contenido del archivo requerido (o cuadro de texto), como se muestra a continuación:
<%
Contenido=getdata (datos, divisor, posición)
%>
3) Obtener el nombre del archivo
Como se analizó anteriormente, 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
%>
Utilice ASP para implementar directamente la función de carga de archivos
Los programadores ASP tradicionales solo pueden usar el objeto FILESYSTEMOBJECT para mover, copiar, eliminar y otras operaciones en archivos de texto (.txt). Si necesitan procesar objetos binarios, deben usar los métodos presentados 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 desde 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 los objetos 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 encontrar 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 ' Flujo de datos de origen de la asignación
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) Cierra el objeto STEAM.
Una vez que se completa la programación, el objeto STEAM debe cerrarse y liberarse de la siguiente manera:
<%
Descr. Cerrar
Establecer desc=nada
cerrar
Establecer STR=nada
%>
Resumir
Este artículo brinda 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.