Resumen: En un entorno de aplicación basado en navegador/servidor, cargar varios tipos de archivos en el navegador siempre ha sido uno de los problemas que afecta a las aplicaciones de administración de archivos de los usuarios. Existen tres mecanismos para cargar archivos en HTTP: RFC1867, PUT y WebDAV. Un método de implementación común es utilizar un nuevo tipo introducido en RFC1867: objetos File y ADO Stream. Este artículo analiza los métodos de carga y los principios de implementación anteriores y brinda ejemplos de soluciones específicas.
Palabras clave: Componente ASP Objeto ARCHIVO
Actualmente, las aplicaciones basadas en el modelo navegador/servidor son más populares. Cuando los usuarios necesitan transferir archivos al servidor, uno de los métodos comunes es ejecutar un servidor FTP y configurar el directorio FTP predeterminado de cada usuario como el directorio de inicio web del usuario, de modo que el usuario pueda ejecutar el programa cliente FTP y cargar archivos en el servidor. directorio web especificado. Esto requiere que los usuarios sepan cómo utilizar el programa cliente FTP. Por lo tanto, esta solución sólo es viable para usuarios experimentados que estén familiarizados con FTP. Si podemos integrar la función de carga de archivos con la Web para que los usuarios puedan completar la tarea de carga utilizando sólo un navegador Web, será muy conveniente para ellos. Sin embargo, debido a la limitación de que el objeto del sistema de archivos solo puede transmitir archivos de texto, el mayor problema de ASP es la carga de archivos. A continuación se describe cómo cargar archivos en una página web basada en el protocolo HTTP.
uno. Tres mecanismos para cargar vía HTTP
Hay tres mecanismos para cargar vía HTTP: RFC1867, PUT y WebDAV.
PUT es un nuevo verbo HTTP introducido en HTTP 1.1. Cuando el servidor web recibe un PUT HTTP y el nombre del objeto, autentica al usuario, recibe el contenido del flujo HTTP y lo almacena directamente en el servidor web. Debido a que esto puede ser perjudicial para un sitio web, también pierde la mayor ventaja de HTTP: la programabilidad del servidor. En el caso de PUT, el servidor maneja la solicitud por sí mismo: no hay espacio para que intervengan aplicaciones CGI o ASP. La única forma de que su aplicación capture PUT es operar en un nivel bajo, la capa de filtrado ISAPI. Por las mismas razones, la aplicación de PUT es muy limitada.
WebDAV permite la autenticación distribuida y la traducción de contenido web. Introduce varios verbos HTTP nuevos que permiten cargar, bloquear/desbloquear y registrar/comprobar contenido web a través de HTTP. "Guardar en web" en Office 2000 se implementa mediante WebDAV. Si lo único que le interesa es cargar contenido, WebDAV funciona muy bien y resuelve muchos problemas. Sin embargo, si necesita cargar archivos dentro de su aplicación web, WebDAV no le resultará útil. Al igual que HTTP PUT, esos verbos WebDAV son interpretados por el servidor, no por la aplicación web. Debe trabajar en la capa de filtrado ISAPI para acceder a estos verbos de WebDAV e interpretar el contenido de su aplicación.
RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) se utilizó como estándar propuesto antes de que finalmente fuera aceptado por el W3C en HTML3.2. Es una idea muy simple pero poderosa: definir un nuevo tipo en un campo de formulario.
<INPUT TYPE="FILE">
Y agregó diferentes esquemas de codificación al formulario en sí, en lugar de usar el típico:
<FORM ACTION="formproc.asp" METHOD="POST">
pero usando:
<FORM ACTION="formproc .asp " METHOD="POST" ENCTYPE="multipart/form-data">
Este esquema de codificación es más eficiente que el esquema de codificación de formulario predeterminado "aplicación/x-url-codificado" cuando se transmiten grandes cantidades de datos. La codificación de URL tiene solo un conjunto de caracteres muy limitado. Cualquier carácter que exceda el conjunto de caracteres debe reemplazarse por '%nn', donde nn representa los 2 dígitos hexadecimales correspondientes. Por ejemplo, incluso los caracteres de espacio normales deberían sustituirse por '%20'. RFC1867, por otro lado, utiliza codificación MIME de varias partes, como se ve comúnmente en mensajes de correo electrónico, para transmitir grandes cantidades de datos sin codificación, pero con sólo unos pocos encabezados simples pero útiles que rodean los datos. Los principales fabricantes de navegadores han adoptado el botón "Examinar..." recomendado y los usuarios pueden utilizar fácilmente el cuadro de diálogo local "Abrir archivo..." para seleccionar los archivos que desea cargar.
RFC1867 aún deja la mayoría de los métodos flexibles para cargar archivos en su aplicación web. PUT tiene un uso muy limitado. WebDAV es útil para los autores de contenido, como los usuarios de FrontPage, pero es menos útil para los desarrolladores web que desean incorporar la carga de archivos en sus aplicaciones web. Por lo tanto, RFC1867 es la mejor manera de incluir la carga de archivos en aplicaciones web.
En aplicaciones prácticas, Microsoft proporciona Posting Acceptor de forma gratuita. ASP no comprende el esquema de codificación "multipart/form-data". En su lugar, Microsoft proporciona Posting Acceptor, una aplicación ISAPI que acepta un REPOST en una página ASP una vez completada la carga.
SA-FileUp de Software Artisans fue uno de los primeros componentes comerciales de Active Server. Después de varias mejoras, ahora existe como un componente ASP puro.
dos.
El principio básicodel análisis del principio de implementación de carga de archivos basado en ASP
es: utilizar el método BinaryRead del objeto ADO Stream para leer todos los datos en el FORM, interceptar los datos del archivo requeridos y guardarlos como un archivo binario.
A continuación se muestra un ejemplo de una página de carga de archivos (upload.htm):
<html>
<cuerpo>
<nombre del formulario="Cargar" Método="Publicar" Enctype="multipart/form-data" Acción="Cargar.asp">
<tipo de entrada="archivo" nombre="NombreDeArchivo">
<INPUT TYPE="Enviar" VALUE="Subir"></TD>
</formulario>
</cuerpo>
</html>
El objeto de archivo se utiliza en el programa, de modo que los datos originales leídos usando el método BinaryRead en Upload.asp no son solo los datos del archivo seleccionado en sí, sino que también incluyen la ruta, el tipo y el envío del archivo. en el disco duro del usuario, la descripción del formulario, el nombre de dominio y otra información relacionada de la página, por lo que necesitamos extraer el contenido específico del archivo. Según el análisis, la línea divisoria entre la información del encabezado y los datos son dos pares de retornos de carro y avances de línea, y también hay información de separación al final. Podemos obtener los datos del archivo utilizando un método similar al siguiente.
Atenuar FormData.FormSize,DataStart,CLStr,DivStr
Tamaño del formulario=Solicitud.TotalBytes
FormData=Solicitud.BinaryRead(Tamaño del formulario)
CLStr=ChrB(13)&ChrB(10)
Inicio de datos=InStrB(FormData.CLStr&CLStr)+4
'4 es la longitud de dos pares de caracteres de retorno de carro y avance de línea
DivStr=IzquierdaB(FormData,InStrB(FormData,CLStr)-1)
Tamaño de datos=InStrB(Inicio de datos+1,FormData,DivStr)-Inicio de datos-2
FormData=MidB(FormData,DataStart,DataSize)
FormData es el contenido del archivo.
El procesamiento correspondiente se puede llevar a cabo según sea necesario. Lo último que debe hacer es guardar el archivo. Hay dos formas de guardar: una es usar el método de operación de archivos binarios en programas como VB o VC, agregar la biblioteca de tipos apropiada al proyecto y finalmente compilarlo en un archivo DLL y luego registrar el archivo DLL cuando se usa. él. . El procedimiento de almacenamiento de archivos es el siguiente:
Función pública Guardar archivo (nombre de ruta como cadena) como cadena
Atenuar objContext como ObjectContext
Dim objRequest como solicitud
Establecer objContext=GetObjectContext()
Establecer objRequest=objContext("Solicitud")
'El siguiente fragmento de código está relacionado con las operaciones de almacenamiento de archivos Dim FormData() As Byte, CLStr, DivStr
Atenuar DataStart mientras sea largo, DataSize mientras sea largo
Tamaño de datos=objRequest.TotalBytes
Redimificar datos de formulario (Tamaño de datos-1)
FormData=objRequest.BinaryRead(Tamaño de datos)
CLStr=ChrB(13) & ChrB(10)
Inicio de datos=InStrB(FormData,CLStr y CLStr)+4
DivStr=IzquierdaB(FormData,InStrB(FormData,CLStr)-1)
Tamaño de datos=InStrB(Inicio de datos+1,FormData,DivStr)-Inicio de datos-2
FormData=MidB(FormData,DataStart,DataSize)
'Crea un archivo binario y escribe FormData en él. Open Pathname For Binary As 1
Ponga #1,,FormData
Cerrar #1
GuardarArchivo="¡OK!"
de la función final
es utilizar el método de operación de archivos binarios proporcionado en ADO STREAM. La declaración para guardar el archivo es: StreamOBJ.SaveToFile (fileName,2). En este tipo de operación, podemos almacenar las operaciones relevantes en un archivo de clase y, al aplicarlas, simplemente incluir el archivo de clase directamente en el programa ASP. Para métodos de procesamiento específicos, consulte la introducción correspondiente.
tres. La instancia del método de implementación de carga de archivos
puede utilizar un método con componentes o sin componentes para implementar la carga de archivos. Para las categorías de componentes, por ejemplo, Microsoft Posting Acceptor (MPA para abreviar) es un componente de servidor gratuito lanzado por Microsoft. La instalación de este tipo de componente también es relativamente conveniente. Para mpa de Microsoft, simplemente ejecute su archivo de instalación. Para los componentes dll generales, debemos registrarlos. Por ejemplo, para usar aspcnUP.dll, sólo necesita ejecutar regsvr32 [ruta]aspcnUP.dll en Windows 2000, y el sistema le mostrará un mensaje de registro exitoso y podrá usar el componente para clases sin componentes; como la clase de carga de componentes de www.5xsoft.com -upload_5xsoft. Al usarlo, simplemente incluya la siguiente declaración en el controlador:
<!--#include FILE="upload.inc"-->
Para conocer las propiedades y los métodos de operación relacionados con
la creación de un objeto de carga
, consulte el manual del usuario de este componente.El siguiente es el código fuente para cargar algunos tipos de archivos (upload.asp), tomando como ejemplo el componente aspcnUP.dll:
<% @ language="vbscript"
Establecer fileUP=Server.CreateObject("aspcn.Upload")
archivoUP.Maxsize=200000
fileUP.Path="d:upfile"
archivoUP.Subir
Para i=0 para fileUP.Count
nombre de campo = fileUP.Nombre de campo (i)
Si fileUP.FileType(fieldname)="zip" o ileUP.FileType(fieldname)="rar" Entonces
fileUP.Guardar nombre de campo
Terminar si
Próximo
Establecer fileUP=Nada
%>
Cuatro. Conclusión
El modelo de aplicación navegador/servidor todavía se está desarrollando rápidamente en el ASP recién lanzado por Microsoft. NET tiene una función de carga de archivos incorporada, que es muy simple y cómoda de usar. Como tecnología completamente nueva, ASP. NET no es sólo una simple actualización de ASP, es un marco completamente nuevo para el desarrollo web que contiene muchas características nuevas. ÁSPID. NET proporciona código que es más fácil de escribir y tiene una estructura más clara. Al utilizar estos códigos, los reutilizaremos y compartiremos más fácilmente, desarrollando así programas cada vez más prácticos.