Foros del Web » Programando para Internet » ASP Clásico »

Response.ContentType word 2007-2010

Estas en el tema de Response.ContentType word 2007-2010 en el foro de ASP Clásico en Foros del Web. Hola a tod@s, no, no me he equivocado de foro, estoy guardando unos archivos en SQL Server, estos pueden ser PDF,JPG, JPEG, DOC y DOCX ...
  #1 (permalink)  
Antiguo 10/06/2010, 09:48
Avatar de Expinete  
Fecha de Ingreso: abril-2006
Ubicación: Zaragoza
Mensajes: 236
Antigüedad: 18 años, 7 meses
Puntos: 3
Response.ContentType word 2007-2010

Hola a tod@s,

no, no me he equivocado de foro, estoy guardando unos archivos en SQL Server,
estos pueden ser PDF,JPG, JPEG, DOC y DOCX,

en principio no tengo ningún problema para obtener los archivos, gracias a una solución dada en este foro por BEBO, este es código que utilizo para ver los archivos...

Código:
if extension = "doc" or extension="docx" then 
		
		Response.ContentType = "application/msword"
	elseif extension= "pdf" then
		Response.ContentType = "application/pdf"
	elseif extension="jpg" then
		Response.ContentType = "image/jpeg"
	elseif extension="jpeg" then
		Response.ContentType = "image/pjpeg"
	end if
	Response.CacheControl = "no-cache"
	Response.AddHeader "Pragma", "no-cache"
	Response.Expires = -1
	
	Response.BinaryWrite contenido 'variable con el campo image
   
      Response.AddHeader "Content-Disposition","attachment;filename=""el nombre del archivo.ext"""
	Response.Flush
Esta solución me funciona a medias..me explico el usuario que utiliza las office 2007 puede abrir el archivo docx aunque le muestra un error al abrirlo,
¿sabéis si hay algún contentType expecífico para docx?
Para rizar un poco más el rizo,
¿conocéis alguna API o clase en ASP a la que pasemos un archivo y nos lo devuelva en formato PDF por ejemplo? gratuita claro, si no no tendra gracia

Gracias.

Última edición por Expinete; 10/06/2010 a las 10:22
  #2 (permalink)  
Antiguo 10/06/2010, 11:26
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 9 meses
Puntos: 146
Respuesta: Response.ContentType word 2007-2010

Me extraño tu mensaje, así que hice rápidamente un ejemplo para verificar lo que dices y por lo menos yo veo que me descarga .docx sin problemas:

Código ASP:
Ver original
  1. <&#37;
  2.        
  3. Set objStream = Server.CreateObject("ADODB.Stream")
  4. objStream.Open
  5. objStream.Type = 1
  6. objStream.LoadFromFile "c:\inetpub\wwwroot\sitios\mispruebas\Texto.docx"
  7. Response.AddHeader "Content-Disposition", "attachment; filename=Texto.docx"
  8. Response.Charset = "UTF-8"
  9. Response.ContentType = "application/msword"
  10. Response.BinaryWrite objStream.Read
  11. Response.Flush
  12. objStream.Close
  13. Set objStream = Nothing
  14.  
  15. %>

pero a lo mejor es por el IIS que yo tengo, así que busque un poco y encontré esto. Office 2007 Mime Types (for IIS)

Chécalo

Sobre lo de algo gratuito que reciba un archivo cualquiera y te regrese un PDF, pues solo que lo mandes a imprimir a una impresora PDF, creo recordar que hay algunas en modo consola para precisamente usarlas en estos casos, pero ahí si por lo menos te toca buscar

saludos
  #3 (permalink)  
Antiguo 11/06/2010, 04:01
Avatar de 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

Gracias Myakire, por tu respuesta, me acabo de dar cuenta que es posible que sea por otros motivos...

hago unas pruebas y te digo...
  #4 (permalink)  
Antiguo 11/06/2010, 04:16
Avatar de 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

Etiquetas: word
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:42.