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

leer - escribir - forzar descarga

Estas en el tema de leer - escribir - forzar descarga en el foro de ASP Clásico en Foros del Web. buenas noches, tengo que importar los datos (texto plano) para incorporar a una aplicación, primero, tengo q leer línea a linea el texto del fichero; ...
  #1 (permalink)  
Antiguo 24/06/2007, 16:07
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 10 meses
Puntos: 2
leer - escribir - forzar descarga

buenas noches,

tengo que importar los datos (texto plano) para incorporar a una aplicación,

primero, tengo q leer línea a linea el texto del fichero;
segundo, escribir el texto tratado en otro archivo;
tercero, forzar la descarga del fichero creado;

como se lee linea a linea, como se escribe con FSO (añadiendo sobre un archivo creado), y por último, como se fuerza la descarga ?

gracias.
  #2 (permalink)  
Antiguo 25/06/2007, 04:22
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 18 años, 5 meses
Puntos: 7
Re: leer - escribir - forzar descarga

Para crear/manipular archivos te recomiendo que eches un vistazo a las FAQs, a las Funciones del foro, y uses la opción Buscar. Ya se ha tratado muchas veces la cuestion.

Básicamente es:

Código:
Const ParaLectura = 1, ParaEscritura = 2, ParaAnexar = 8 
Dim fso, MiArchivo 
Set fso = server.CreateObject("Scripting.FileSystemObject") 
Set MiArchivo = fso.OpenTextFile("c:\archivoPrueba.txt", ParaAnexar, True)
MiArchivo.Write("Esto es una prueba.") 
MiArchivo.Close
La otra cuestion es un poco más complicada. Para enviar un archivo al cliente, éste habrá de haber pulsado primero alguna opcion o botón (evento).

Una vez provocado el evento, puedes hacer todo lo relacionado con los archivos que te he puesto mas arriba. Finalizada la tarea, deberás "dibujar" el archivo en el navegador como archivo. :D No te asustes. Yo uso este script:

Código:
Response.Buffer = True
Response.Clear 

server.ScriptTimeout = 60000
Dim strFilePath, strFileSize, strFileName
 
 Const adTypeBinary = 1
 
 name1 = request.QueryString("n1")
 name2 = request.QueryString("n2")
 strFilePath = ""
 strFileName = name1
 
  set FSO = Server.CreateObject("Scripting.FileSystemObject")
  if fso.FileExists(strFileName) then

      set oFile = FSO.GetFile(strFileName)
      strFileSize = oFile.Size
     
     'Response.Clear
 
    Set objStream = Server.CreateObject("ADODB.Stream")
    objStream.Open
    objStream.Type = adTypeBinary
    objStream.LoadFromFile(strFileName)
 
    strFileType = right(strFileName, len(strFileName) - instrrev(strFileName, "."))
 
    Select Case strFileType
        Case "asf"
            ContentType = "video/x-ms-asf"
        Case "avi"
            ContentType = "video/avi"
        Case "doc"
            ContentType = "application/msword"
        Case "zip"
            ContentType = "application/zip"
        Case "xls"
            ContentType = "application/vnd.ms-excel"
        Case "gif"
            ContentType = "image/gif"
        Case "jpg", "jpeg"
            ContentType = "image/jpeg"
        Case "wav"
            ContentType = "audio/wav"
        Case "mp3"
            ContentType = "audio/mpeg3"
        Case "mpg", "mpeg"
            ContentType = "video/mpeg"
        Case "rtf"
            ContentType = "application/rtf"
          Case "htm", "html", "txt"
            ContentType = "text/html"
          Case "asp"
            ContentType = "text/asp"
        Case Else
            'Handle All Other Files
            ContentType = "application/octet-stream"
    End Select

     Response.AddHeader "Content-Disposition", "attachment; filename=" & name2
     Response.AddHeader "Content-Length", strFileSize
     ' In a Perfect World, Your Client would also have UTF-8 as the default 
     ' In Their Browser
     Response.Charset = "UTF-8"
     Response.ContentType = ContentType
 
     Response.BinaryWrite(objStream.Read)
     Response.Flush
     objStream.Close
     Set objStream = Nothing
 
 else
 
     response.Write("archivo " & strFileName & " no existe")
 
 end if

Como ves, necesita dos valores:

n1 = Nombre y ruta del archivo (en formato Windows --> c:\miarchivo.txt )
n2 = Nombre final que quieres poner al archivo

Este script provoca la descarga del archivo en el equipo del cliente. Como puedes apreciar lo que hace es decirle al navegador que el script es un archivo (usando el response.ContentType) y dibujandolo despues de forma binaria:

' Aqui le decimos el nombre
Response.AddHeader "Content-Disposition", "attachment; filename=" & name2
' Aqui su peso
Response.AddHeader "Content-Length", strFileSize

' UTF-8 o iso-8859-1 --> Usa UTF-8, es mas standard
Response.Charset = "UTF-8"

' La madre del cordero:
Response.ContentType = ContentType

' Y su padre :D Para que no nos salga el texto en el navegador
' y que nos descarge el archivo, debes hacerlo de forma binaria
Response.BinaryWrite(objStream.Read)


Te recomiendo que hagas todas las tareas en un solo archivo (las de escritura del archivo y las de mandar el archivo) Te facilitará las cosas.

suerte!


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 25/06/2007, 05:41
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 21 años, 10 meses
Puntos: 2
Re: leer - escribir - forzar descarga

buenos días,

si señor, muy agradecido, una respuesta en toda regla.

salu2.
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 13:43.