Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo usar asp para cargar imágenes en una carpeta y guardar la ruta en la base de datos de acceso

Cómo usar asp para cargar imágenes en una carpeta y guardar la ruta en la base de datos de acceso

Después de usar ASP para escribir aplicaciones de sitios web durante mucho tiempo, inevitablemente encontrará varios problemas. Entre ellos, cómo cargar archivos al servidor es probablemente el problema más común, especialmente al cargar imágenes. Si desea implementar una función de "una estrella por día" similar a la proporcionada por la comunidad virtual NetEase en su propia comunidad, debe proporcionar la función para que los internautas carguen fotos. Para cargar archivos de imágenes al servidor, puede utilizar varios componentes de carga de archivos gratuitos. Aunque son muy potentes, en muchos casos solo podemos utilizar espacio gratuito compatible con ASP o alquilar el espacio virtual de otras personas. simplemente nos resulta imposible utilizar el componente de carga de archivos; en el segundo caso, también tenemos que pagar mucho "dinero". A menos que tenga su propio host virtual, puede instalar fácilmente los componentes que necesita en el servidor. Esta situación está fuera del alcance de la mayoría de las personas. ¿Entonces no hay nada que podamos hacer? Jaja, la respuesta es sí (por supuesto que sí, de lo contrario no podría escribir este artículo). Usemos código ASP puro para implementar la función de cargar imágenes y guardarlas en la base de datos (por cierto, también implementamos la función de mostrar imágenes en la base de datos en la página web).

Primero, familiaricémonos con los métodos de objeto que usaremos. Generalmente usamos el objeto Solicitud para obtener los datos pasados ​​​​de la página anterior. De manera similar, también podemos usar el objeto Request para obtener datos del archivo cargado, usando el método Request.BinaryRead(). El método que utilizamos para leer los datos de la imagen de la base de datos y mostrarlos en la página web es:

Request.BinaryWrite(). Cuando obtenemos los datos de la imagen y los guardamos en la base de datos, no podemos usar directamente la instrucción Insert para operar la base de datos. En cambio, debemos usar el método AppendChunk de ADO. De manera similar, para leer los datos de la imagen en la base de datos. Método GetChunk. La sintaxis específica de cada método es la siguiente:

*Sintaxis de Request.BinaryRead:

variant=Request.BinaryRead(count)

Parámetros

variante

El valor de retorno contiene los datos leídos del cliente.

count

Indica la cantidad de datos a leer del cliente. Este valor es menor o igual a la cantidad de datos obtenidos mediante el método Request.TotalBytes.

*Sintaxis de Request.BinaryWrite:

Request.BinaryWritedata

Parámetros

datos

en los que se escribirá paquete en el navegador del cliente.

*Sintaxis de Request.TotalBytes:

variant=Request.TotalBytes

Parámetros

variante

Regresar de El número de bytes de datos leídos por el cliente.

*Sintaxis de AppendChunk

Agrega datos a un texto grande, un campo de datos binarios o un objeto de parámetro.

object.AppendChunkData

Parámetros

objectField o objeto Parameter

Tipo de variante de datos, que contiene datos agregados al objeto.

Descripción

Utilice el método AppendChunk del objeto Campo o Parámetro para completar datos largos binarios o de números de caracteres

en el objeto.

Cuando la memoria del sistema es limitada, puede utilizar el método AppendChunk para realizar algunas, pero no todas, las operaciones con valores enteros largos.

*Sintaxis GetChunk

Devuelve todo o parte del contenido de un objeto de campo de datos binarios o de texto grande.

variable=field.GetChunk(Size)

Valor de retorno

Devuelve el tipo de variante.

Parámetros

El tamaño es una expresión entera larga, igual al número de bytes o caracteres que se recuperarán.

Descripción

Utilice el método GetChunk del objeto Field para recuperar algunos o todos sus datos binarios o de caracteres largos. Cuando la memoria del sistema es limitada, puede utilizar el método GetChunk para procesar algunos, pero no todos, los valores enteros largos.

Los datos devueltos por la llamada GetChunk se asignarán a la "variable". Si el Tamaño es mayor que los datos restantes,

GetChunk solo devuelve los datos restantes sin llenar la "variable" con espacios en blanco. Si el campo está vacío, el método GetChunk devuelve Null.

Cada llamada subsiguiente a GetChunk recuperará datos comenzando donde terminó la llamada anterior a GetChunk. Sin embargo, si recupera datos de un campo y luego establece o lee el valor de otro campo en el registro actual, ADO asumirá que los datos se han recuperado del primer campo. Si se vuelve a llamar al método GetChunk en el primer campo, ADO interpretará la llamada como una nueva operación GetChunk y comenzará a leer desde el principio del registro. Si el otro objeto Recordset no es una copia del primer objeto Recordset, acceder a los campos que contiene no interrumpirá la operación GetChunk.

Si el bit adFldLong en la propiedad Atributos del objeto Campo está establecido en Verdadero, puede usar el método GetChunk en el campo.

Si no hay ningún registro actual al utilizar el método Getchunk en el objeto Campo, se generará el error 3021 (Sin registro actual).

A continuación, vamos a diseñar nuestra base de datos a modo de prueba, la estructura de nuestra base de datos es la siguiente (access2000):

Descripción del tipo de nombre de campo

id. Valor de clave principal de numeración automática

El objeto OLE img se utiliza para guardar datos de imagen

Para MSSQLServer7, la estructura correspondiente es la siguiente:

Descripción del tipo de nombre de campo

p>

id int (Identidad) valor de clave principal

img image se usa para guardar datos de imagen

Ahora comenzamos a escribir formalmente nuestro ASP puro Parte de carga de código Primero, hay una interfaz de carga proporcionada a los usuarios, que les permite seleccionar imágenes para cargar.

El código es el siguiente

(upload.htm):

lt;htmlgt;

lt;bodygt;

lt;centergt ;

lt;htmlgt;

lt;bodygt;

lt;centergt;

lt; p>

lt; nombre del formulario="mainForm" enctype="multipart/form-data" action="process.asp" método=postgt;

lt; inputtype=filename=mefilegt;lt;

<; p>lt;inputtype=submitname=okvalue="OK"gt;

lt;/formgt;

lt;/centergt;

lt;/bodygt ;

lt;/htmlgt;

Tenga en cuenta que enctype="multipart/form-data" debe tener este atributo en el formulario; de lo contrario, no podrá obtener los datos cargados. A continuación, debemos realizar el procesamiento necesario de los datos obtenidos del navegador en Process.asp, porque los datos que obtenemos en Process.asp no solo contienen los datos de las imágenes cargadas que queremos, sino que también contienen otra información inútil que necesitamos. para eliminar datos redundantes y guardar los datos de la imagen procesada en la base de datos. Aquí tomamos access2000 como ejemplo.

El código específico es el siguiente (process.asp):

lt;

response.buffer=true

formsize=request.totalbytes

formdata =request.binaryread(formsize)

bncrlf=chrB(13)amp;chrB(10)

divider=leftB(formdata, clng(instrb(formdata, bncrlf) )-1 )

datastart=instrb(formdata, bncrlfamp; bncrlf) 4

dataend=instrb(datastart 1, formdata, divider)-datastart

misdatos =midb( formdata, datastart, dataend)

setconnGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)} ; DBQ= "&server.MapPath("images.mdb")&"uid=PWD="

connGraph.Open

setrec=server.createobject("ADODB. recordset")

rec.Open"SELECT*FROM[images]whereidisnull", connGraph, 1, 3

rec.addnew

rec("img" ).appendchunkmydata

rec.update

rec.close

setrec=nada

setconnGraph=nada

gt;

Bien, ahora hemos guardado las imágenes cargadas en una base de datos llamada images.mdb. El trabajo restante es mostrar los datos de las imágenes en la base de datos en la página web.

Generalmente en HTML, las imágenes se muestran usando la etiqueta , es decir, , pero nuestras imágenes se guardan en la base de datos. ¿Qué es la "ruta de la imagen"? Jaja, de hecho, además de especificar la ruta, este atributo SRC también se puede usar así:

lt;IMGSRC="showimg.asp?id=xxx"gt;

Entonces, lo que queremos es leer los datos calificados de la base de datos en showimg.asp y devolverlos al atributo SRC. El código específico es el siguiente (showimg.asp):

. lt;

setconnGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)}; DBQ="amp; /p>

server.MapPath("images.mdb")&"uid=PWD="

connGraph.Open

setrec=server.createobject ("ADODB.recordset ")

strsql="selectimgfromimageswhereid="amp;trim(request("id"))

rec.openstrsql, connGraph, 1, 1

Respuesta .ContentType="image/*"

Response.BinaryWriterec("img").getChunk(7500000)

rec.close

setrec=nada

setconnGraph=nada

gt;

Tenga en cuenta que se debe especificar Response.ContentType="image/*" antes de enviarlo al navegador,

Para que la imagen pueda visualizarse normalmente.

Lo último a tener en cuenta es que el procesamiento en mi proceso.asp no tiene en cuenta que hay otros datos en la primera página (upload.htm), como lt; INPUT type=tesxt name. =useridgt; Espere, si existen estos elementos, su proceso.asp debe prestar atención al procesamiento de datos innecesarios.