Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/06/2010, 04:16
Avatar de Expinete
Expinete
 
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 7 meses
Puntos: 3
Respuesta: Response.ContentType word 2007-2010

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:
<&#37;
'#################################################
'                                                                                                    
'    Fichero:            xelupload.asp
'    
Descripci&#243;n:        contiene las clases 
'                        "xelUpload" y "Fichero"
'                        
escritas en VBScript
'
'    
Autor:                Carlos de la Orden Dijs
'    Email:                [email][email protected][/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 
'
terminamosno 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&#243;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 '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&#237; del control
    
iPosFich =InStrB(posLimitebyteDatosstr2byte("filename="))
    
posLimite InStrB(iPosFinbyteDatosbyteLimite)
    
    
'¿fichero o campo del formulario?
    if iPosFich <> 0 and iPosFich < PosLimite then
        '
es un ficherocreo un nuevo objeto fichero y lo a&#241;ado a Ficheros
        
Dim oFicherostrNombrestrForm
        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(strNombreLen(strNombre)-InStrRev(strNombre"\")) '"
        
        
iPos InStrB(iPosFinbyteDatosstr2byte("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(byteDatosiPosInicioiPosFin-iPosInicio))
        
        
iPosInicio iPosFin 4    'me salto los 3 retornos de carro que lleva!!!
        iPosFin = InStrB(iPosInicio, byteDatos, byteLimite)-2 '
dos caracteres atr&#225;s
        
oFichero.Datos MidB(byteDatosiPosInicioiPosFin-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(iPosbyteDatosstr2byte(chr(13)))
        
iPosInicio iPos 4
        iPosFin 
InStrB(iPosIniciobyteDatosbyteLimite)-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&#237;mite
    
iPosLimite InStrB(iPosLimite+LenB(byteLimite), byteDatosbyteLimite)
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 ibytebuf
for 1 to LenB(bin)
    
bytebuf bytebuf Chr(AscB(MidB(bini1)))
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(rutathen Exit Sub
set oFich 
oFSO.CreateTextFile(ruta Nombretrue)

for 
1 to LenB(Datos)
    
oFich.Write Chr(AscB(MidB(Datosi1)))
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(rutathen Exit Sub
set oFich 
oFSO.CreateTextFile(ruta nombreficherotrue)

for 
1 to LenB(Datos)
    
oFich.Write Chr(AscB(MidB(Datosi1)))
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&#241;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"

Última edición por Expinete; 11/06/2010 a las 04:31