A ver... creo que es por guardar el archivo en la base de datos, date cuenta que en el código que me has puesto, utilizas un archivo físico, para guardar el archivo en la base de datos utilizo la clase xelupload.asp
Código PHP:
<%
'#################################################
'
' Fichero: xelupload.asp
' Descripción: contiene las clases
' "xelUpload" y "Fichero"
' escritas en VBScript
'
' Autor: Carlos de la Orden Dijs
' Email: [email]carlos@aspfacil.com[/email]
' Fecha: Septiembre 2001
' Documentación: LEEME.TXT
'
' Ultima versión en
' [url]http://www.aspfacil.com/[/url]
'
'-------------------------------------------------
' Ultima modificación 6/9/2001
'#################################################
Class xelUpload
' Maneja los formularios enviados como 'multipart/form-data' (ficheros)
Public Ficheros
Private eltosForm
'------------------------------------------------------------------------
Private Sub Class_Initialize()
set Ficheros = Server.CreateObject("Scripting.Dictionary")
set eltosForm = Server.CreateObject("Scripting.Dictionary")
End Sub
'------------------------------------------------------------------------
Private Sub Class_Terminate()
if IsObject(Ficheros) then
Ficheros.RemoveAll
set Ficheros = nothing
end if
if IsObject(eltosForm) then
eltosForm.RemoveAll
set eltosForm = nothing
end if
End Sub
'------------------------------------------------------------------------
'Permite hacer, por ejemplo: Response.Write(upload.Form("nombre"))
Public Property Get Form(campo)
if eltosForm.Exists(campo) then
Form = eltosForm.Item(campo)
else
Form = ""
end if
End Property
'------------------------------------------------------------------------
Public Sub Upload()
'Inicia el proceso. Debe llamarse ANTES DE HACER CUALQUIER OTRA COSA
Dim byteDatos, strControl
Dim iPosInicio, iPosFin, iPos, byteLimite, iposLimite, posLimite
Dim iPosFich, iPosLim
byteDatos = Request.BinaryRead(Request.TotalBytes)
iPosInicio = 1
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(13)))
if (iPosFin-iPosInicio) <= 0 then
'terminamos, no hay nada que leer
Exit Sub
end if
'extraemos el limite de principio y fin de los datos (p.e. -----2323g237623)
byteLimite = MidB(byteDatos, iPosInicio, iPosFin-iPosInicio)
posLimite = InStrB(1, byteDatos, byteLimite)
'terminamos cuando la posición del próximo límite sea igual
'a la del límite final, que lleva "--" detrás.
do until posLimite = InStrB(byteDatos, byteLimite & str2byte("--"))
iPos = InStrB(posLimite, byteDatos, str2byte("Content-Disposition"))
iPos = InStrB(iPos, byteDatos, str2byte("name=")) 'nombre del control en <FORM>
iPosInicio = iPos + 6 'me salto 6 caracteres -> name="
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(34))) 'busco las comillas de cierre
'y tengo el nombre del control!
strControl = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))
'busco ahora los datos en sí del control
iPosFich =InStrB(posLimite, byteDatos, str2byte("filename="))
posLimite = InStrB(iPosFin, byteDatos, byteLimite)
'¿fichero o campo del formulario?
if iPosFich <> 0 and iPosFich < PosLimite then
'es un fichero, creo un nuevo objeto fichero y lo añado a Ficheros
Dim oFichero, strNombre, strForm
set oFichero = new Fichero
iPosInicio = iPosFich + 10 'me salto 10 caracteres -> filename="
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(34)))
strNombre = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))
'quito la ruta inicial
oFichero.Nombre = Right(strNombre, Len(strNombre)-InStrRev(strNombre, "\")) '"
iPos = InStrB(iPosFin, byteDatos, str2byte("Content-Type:"))
iPosInicio = iPos + 14 'me salto Content-Type y un espacio!!
iPosFin = InStrB(iPosInicio, byteDatos, str2byte(chr(13))) 'busco el retorno de carro
oFichero.TipoContenido = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))
iPosInicio = iPosFin + 4 'me salto los 3 retornos de carro que lleva!!!
iPosFin = InStrB(iPosInicio, byteDatos, byteLimite)-2 'dos caracteres atrás
oFichero.Datos = MidB(byteDatos, iPosInicio, iPosFin-iPosInicio)
if oFichero.Tamano > 0 then 'lo añado a la colección Ficheros!
Ficheros.Add strControl, oFichero
end if
else
'es un campo del formulario
iPos = InStrB(iPos, byteDatos, str2byte(chr(13)))
iPosInicio = iPos + 4
iPosFin = InStrB(iPosInicio, byteDatos, byteLimite)-2
'extraigo el valor del control del formulario!
strForm = byte2str(MidB(byteDatos, iPosInicio, iPosFin-iPosInicio))
if not eltosForm.Exists(strControl) then
eltosForm.Add strControl, strForm
else
eltosForm.Item(strControl) = eltosForm.Item(strControl)+","&strForm
end if
end if
'saltamos al siguiente límite
iPosLimite = InStrB(iPosLimite+LenB(byteLimite), byteDatos, byteLimite)
loop
End Sub
'------------------------------------------------------------------------
Private Function str2byte ( str )
Dim i, strbuf
for i = 1 to Len(str)
strbuf = strbuf & ChrB(AscB(Mid(str, i, 1)))
next
str2byte = strbuf
End Function
'------------------------------------------------------------------------
Private Function byte2str ( bin )
Dim i, bytebuf
for i = 1 to LenB(bin)
bytebuf = bytebuf & Chr(AscB(MidB(bin, i, 1)))
next
byte2str = bytebuf
End Function
'------------------------------------------------------------------------
End Class
'############################ Clase Fichero!!! ##########################
Class Fichero
'------------------------------------------------------------------------
Public Nombre
Public TipoContenido
Public Datos
'------------------------------------------------------------------------
Public Property Get Tamano()
Tamano = LenB(Datos)
End Property
'------------------------------------------------------------------------
Public Sub Guardar(ruta)
Dim oFSO, oFich
Dim i
if ruta = "" or Nombre = "" then Exit Sub
if Mid(ruta, Len(ruta)) <> "\" then '"
'añado la ultima barra a la ruta
ruta = ruta & "" '"
end if
set oFSO = Server.CreateObject("Scripting.FileSystemObject")
if not oFSO.FolderExists(ruta) then Exit Sub
set oFich = oFSO.CreateTextFile(ruta & Nombre, true)
for i = 1 to LenB(Datos)
oFich.Write Chr(AscB(MidB(Datos, i, 1)))
next
oFich.Close
set oFSO = nothing
End Sub
'------------------------------------------------------------------------
Public Sub GuardarComo(nombrefichero, ruta)
Dim oFSO, oFich, i
if ruta = "" or nombrefichero = "" then Exit Sub
if Mid(ruta, Len(ruta)) <> "\" then '"
'añado la ultima barra a la ruta
ruta = ruta & "" '"
end if
set oFSO = Server.CreateObject("Scripting.FileSystemObject")
if not oFSO.FolderExists(ruta) then Exit Sub
set oFich = oFSO.CreateTextFile(ruta & nombrefichero, true)
for i = 1 to LenB(Datos)
oFich.Write Chr(AscB(MidB(Datos, i, 1)))
next
oFich.Close
set oFSO = nothing
End Sub
'------------------------------------------------------------------------
Public Sub GuardarBD (byRef field)
if LenB(Datos) = 0 then Exit Sub
field.AppendChunk Datos
End Sub
End Class
'------------------------------------------------------------------------
%>
Para guardar el archivo en la BBDD lo hago así:
Código PHP:
Set Subir = New xelUpload
Subir.Upload()
set Archivo1 = Subir.Ficheros("archivo")
peso1=Archivo1.Tamano
tipo1=Archivo1.TipoContenido
nombre = Archivo1.Nombre
contenido = Archivo1.Datos
arr= split(nombre,".")
ConnBD
SQL = "select * FROM tablaArchivos"
Set miRecordset = Server.CreateObject("ADODB.RecordSet")
'miRecordset.CursorType = 2
'Abrimos el Recordset con cerrojo 2 (adLockPessimiestic)
'que permite modificaciones
miRecordset.open SQL,objConn, 0, 2
'Añadimos un nuevo registro
rs.AddNew
rs.Fields("NombreDeArchivo") = nombre
rs.Fields("extension") = ext
rs.fields("Id") = Id
y los datos binarios
Archivo1.GuardarBD rs.Fields("contenido")
rs.Update
rs.Close
disconnBD
¿es posible que esté guardando los datos del fichero de una manera errónea en la base de datos ? o por el contratrio lo estoy haciendo mal...
repito lo dicho en mi anterior post... el archivo lo abre y en principio parece que sale todo bien, pero al principio sale un mensaje de error
"Error en el archivo"