Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/06/2007, 04:22
tammander
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 2 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é -