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,
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 p>
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.