Buscar en Asptutor     
Demo Tienda Virtual Tutorcar
 Navegacion->Inicio | Active Server Pages  

La web de los recursos y ejemplos de asp

Versión para imprimir

 

Alojado en:


urbe-networks.com

Recomienda esta pagina a un amigo

Servicios Gratuitos

Articulos relacionados

Utilizar GetRows()

Tienda Virtual - Carrito de compra

Messenger a través de BD en ASP

Miniaplicacion de comercio electronico

Objeto Datagrid de ASP.NET en ASP

Acotación de resultados

Como Bloquear el boton derecho del raton

El Objeto FSO

Ventana SQL (Revision)

Diferentes formas de establecer la conexión con una base de datos

Objeto Server

Objeto Datagrid de ASP.NET en ASP

Como Bloquear el boton derecho del raton

Subir Imágenes a una base de datos

Uso de las Cookies

Ejemplo de Consulta con formulario


Enlaces recomendados

   

Tutorial ASP

Upload de ficheros al servidor
Este articulo ha sido leído 74.977 veces

Upload de ficheros al servidor


 Articulo enviado por Virtus    
 

Introducción

A través de este articulo aprenderás a enviar ficheros al servidor sin necesidad de utilizar componentes externos. De esta forma evitaremos tener que registrar o utilizar componentes comerciales o dlls de procedencia desconocida.

Loader.asp

Abre tu notepad.exe (o cualquier otro editor ASP) y crea un nuevo fichero. Guardalo como 'Loader.asp'. Ahora copia el texto de abajo y pégalo en la nueva pagina. Guardalo todo:

 
<%
  ' -- Loader.asp --
  ' -- version 1.5
  ' -- last updated 6/13/2002
  
  Class Loader
    Private dict
    
    Private Sub Class_Initialize
      Set dict = Server.CreateObject("Scripting.Dictionary")
    End Sub
    
    Private Sub Class_Terminate
      If IsObject(intDict) Then
        intDict.RemoveAll
        Set intDict = Nothing
      End If
      If IsObject(dict) Then
        dict.RemoveAll
        Set dict = Nothing
      End If
    End Sub

    Public Property Get Count
      Count = dict.Count
    End Property

    Public Sub Initialize
      If Request.TotalBytes > 0 Then
        Dim binData
          binData = Request.BinaryRead(Request.TotalBytes)
          getData binData
      End If
    End Sub
    
    Public Function getFileData(name)
      If dict.Exists(name) Then
        getFileData = dict(name).Item("Value")
        Else
        getFileData = ""
      End If
    End Function

    Public Function getValue(name)
      Dim gv
      If dict.Exists(name) Then
        gv = CStr(dict(name).Item("Value"))
        
        gv = Left(gv,Len(gv)-2)
        getValue = gv
      Else
        getValue = ""
      End If
    End Function
    
    Public Function saveToFile(name, path)
      If dict.Exists(name) Then
        Dim temp
          temp = dict(name).Item("Value")
        Dim fso
          Set fso = Server.CreateObject("Scripting.FileSystemObject")
        Dim file
          Set file = fso.CreateTextFile(path)
            For tPoint = 1 to LenB(temp)
                file.Write Chr(AscB(MidB(temp,tPoint,1)))
            Next
            file.Close
          saveToFile = True
      Else
          saveToFile = False
      End If
    End Function
    
    Public Function getFileName(name)
      If dict.Exists(name) Then
        Dim temp, tempPos
          temp = dict(name).Item("FileName")
          tempPos = 1 + InStrRev(temp, "\")
          getFileName = Mid(temp, tempPos)
      Else
        getFileName = ""
      End If
    End Function
    
    Public Function getFilePath(name)
      If dict.Exists(name) Then
        Dim temp, tempPos
          temp = dict(name).Item("FileName")
          tempPos = InStrRev(temp, "\")
          getFilePath = Mid(temp, 1, tempPos)
      Else
        getFilePath = ""
      End If
    End Function
    
    Public Function getFilePathComplete(name)
      If dict.Exists(name) Then
        getFilePathComplete = dict(name).Item("FileName")
      Else
        getFilePathComplete = ""
      End If
    End Function

    Public Function getFileSize(name)
      If dict.Exists(name) Then
        getFileSize = LenB(dict(name).Item("Value"))
      Else
        getFileSize = 0
      End If
    End Function

    Public Function getFileSizeTranslated(name)
      If dict.Exists(name) Then
        temp = 1 + LenB(dict(name).Item("Value"))
          If Len(temp) <= 3 Then
            getFileSizeTranslated = temp & " bytes"
          ElseIf Len(temp) > 6 Then
            temp = FormatNumber(((temp / 1024) / 1024), 2)
            getFileSizeTranslated = temp & " megabytes"  
          Else
            temp = FormatNumber((temp / 1024), 2)
            getFileSizeTranslated = temp & " kilobytes"
          End If
      Else
        getFileSizeTranslated = ""
      End If
    End Function
    
    Public Function getContentType(name)
      If dict.Exists(name) Then
        getContentType = dict(name).Item("ContentType")
      Else
        getContentType = ""
      End If
    End Function

  Private Sub getData(rawData)
    Dim separator 
      separator = MidB(rawData, 1, InstrB(1, rawData, ChrB(13)) - 1)

    Dim lenSeparator
      lenSeparator = LenB(separator)

    Dim currentPos
      currentPos = 1
    Dim inStrByte
      inStrByte = 1
    Dim value, mValue
    Dim tempValue
      tempValue = ""

    While inStrByte > 0
      inStrByte = InStrB(currentPos, rawData, separator)
      mValue = inStrByte - currentPos

      If mValue > 1 Then
        value = MidB(rawData, currentPos, mValue)

        Dim begPos, endPos, midValue, nValue
        Dim intDict
          Set intDict = Server.CreateObject("Scripting.Dictionary")
    
          begPos = 1 + InStrB(1, value, ChrB(34))
          endPos = InStrB(begPos + 1, value, ChrB(34))
          nValue = endPos

        Dim nameN
          nameN = MidB(value, begPos, endPos - begPos)

        Dim nameValue, isValid
          isValid = True
          
          If InStrB(1, value, stringToByte("Content-Type")) > 1 Then

            begPos = 1 + InStrB(endPos + 1, value, ChrB(34))
            endPos = InStrB(begPos + 1, value, ChrB(34))
  
            If endPos = 0 Then
              endPos = begPos + 1
              isValid = False
            End If
            
            midValue = MidB(value, begPos, endPos - begPos)
              intDict.Add "FileName", trim(byteToString(midValue))
                
            begPos = 14 + InStrB(endPos + 1, value, stringToByte("Content-Type:"))
            endPos = InStrB(begPos, value, ChrB(13))
            
            midValue = MidB(value, begPos, endPos - begPos)
              intDict.Add "ContentType", trim(byteToString(midValue))
            
            begPos = endPos + 4
            endPos = LenB(value)
            
            nameValue = MidB(value, begPos, endPos - begPos)
          Else
            nameValue = trim(byteToString(MidB(value, nValue + 5)))
          End If

          If isValid = true Then
            intDict.Add "Value", nameValue
            intDict.Add "Name", nameN

            dict.Add byteToString(nameN), intDict
          End If
      End If

      currentPos = lenSeparator + inStrByte
    Wend
  End Sub
  
  End Class

  Private Function stringToByte(toConv)
    Dim tempChar
     For i = 1 to Len(toConv)
       tempChar = Mid(toConv, i, 1)
      stringToByte = stringToByte & chrB(AscB(tempChar))
     Next
  End Function

  Private Function byteToString(toConv)
    For i = 1 to LenB(toConv)
      byteToString = byteToString & chr(AscB(MidB(toConv,i,1))) 
    Next
  End Function
%>


     

Insert.htm

Abre el notepad y guarda el texto de abajo en un fichero con el nombre Insert.htm. En este fichero se encuentra el formulario que nosotros usaremos para enviar el fichero. Es importante definir en el formulario lo siguiente: enctype="multipart/form-data", de esta forma los datos enviados al servidor serán de carácter binario y así podremos almacenar el fichero en el disco duro.

<!-- insert.htm -->
<html>
<head>
	<title>Uploading de ficheros con ASP</title>
	<style>
		body, input { font-family:verdana,arial; font-size:10pt; }
	</style>
</head>
<body>
	<p align="center">
		<b>Uploading de ficheros con ASP</b><br>
		<a href="show.asp">Para ver los ficheros Uploaded pulsa aqui</a>
	</p>
	
	<table border="0" align="center">
	<tr>
	<form method="POST" enctype="multipart/form-data" action="Insert.asp">
	<td>Nombre :</td><td>
		<input type="text" name="name" size="40"></td></tr>
	<td>Fichero :</td><td>
		<input type="file" name="file" size="40"></td></tr>
	<td> </td><td>
		<input type="submit" value="Submit"></td></tr>
	</form>
	</tr>
	</table>

</body>
</html>

 

Insert.asp

Abre el notepad y guarda el texto de abajo en un fichero con el nombre Insert.htm. En este fichero se encuentra la acción a realizar con los datos del formulario enviado. El recibe los datos binarios del formulario y los procesa internamente usando el código de Loader

<% ' Insert.asp %>
<!--#include file="Loader.asp"-->
<%
   Response.Buffer = True

   ' load object
   Dim load
      Set load = new Loader
      
      ' calling initialize method
      load.initialize
      
   ' File binary data
   Dim fileData
      fileData = load.getFileData("file")
   ' File name
   Dim fileName
      fileName = LCase(load.getFileName("file"))
   ' File path
   Dim filePath
      filePath = load.getFilePath("file")
   ' File path complete
   Dim filePathComplete
      filePathComplete = load.getFilePathComplete("file")
   ' File size
   Dim fileSize
      fileSize = load.getFileSize("file")
   ' File size translated
   Dim fileSizeTranslated
      fileSizeTranslated = load.getFileSizeTranslated("file")
   ' Content Type
   Dim contentType
      contentType = load.getContentType("file")
   ' No. of Form elements
   Dim countElements
      countElements = load.Count
   ' Value of text input field "name"
   Dim nameInput
      nameInput = load.getValue("name")
   ' Path where file will be uploaded
   Dim pathToFile
      pathToFile = Server.mapPath("uploaded/") & "\" & fileName
   ' Uploading file data
   Dim fileUploaded
      fileUploaded = load.saveToFile ("file", pathToFile)
      
   ' destroying load object
   Set load = Nothing
%>

<html>
<head>
   <title>File Uploading with ASP</title>
   <style>
      body, input, td { font-family:verdana,arial; font-size:10pt; }
   </style>
</head>
<body>
   <p align="center">
      <b>File Uploading with ASP</b><br>
      <a href="show.asp">To see uploaded files click here</a>
   </p>
   
   <table width="700" border="1" align="center">
   <tr>
      <td>File Name</td><td><%= fileName %></td>
   </tr><tr>
      <td>File Path</td><td><%= filePath %></td>
   </tr><tr>
      <td>File Path Complete</td><td><%= filePathComplete %></td>
   </tr><tr>
      <td>File Size</td><td><%= fileSize %></td>
   </tr><tr>
      <td>File Size Translated</td><td><%= fileSizeTranslated %></td>
   </tr><tr>
      <td>Content Type</td><td><%= contentType %></td>
   </tr><tr>
      <td>No. of Form Elements</td><td><%= countElements %></td>
   </tr><tr>
      <td>Name</td><td><%= nameInput %></td>
   </tr>
   </table><br><br>
   
   <p style="padding-left:220;">
   <%
      If fileUploaded = True Then
         Response.Write fileName & " data uploaded..."
      Else
         Response.Write "<font color=""red"">File could not be uploaded..."
         Response.Write "</font>"
         Response.Write "<br>Please select a file before hitting the 'Submit'"
         Response.Write " button."
      End If
   %>
   </p>
   
   <br>
   <table border="0" align="center">
   <tr>
   <form method="POST" enctype="multipart/form-data" action="Insert.asp">
   <td>Name :</td><td>
      <input type="text" name="name" size="40" value="<%= nameInput %>"></td></tr>
   <td>File :</td><td>
      <input type="file" name="file" size="40"></td></tr>
   <td> </td><td>
      <input type="submit" value="Submit"></td></tr>
   </form>
   </tr>
   </table>

</body>
</html>

 


Explicación

El fichero seleccionado mediante el formulario , será enviado al directorio que hayamos indicado en el código de la pagina insert.asp :

' Camino donde el fichero sera enviado:
Dim pathToFile
	pathToFile = Server.mapPath("uploaded/") & "\" & fileName
' Realizo el Upload
Dim fileUploaded
	fileUploaded = load.saveToFile ("file", pathToFile)
		
' Destruyo el objeto load
Set load = Nothing
%>

 

La variable pathToFile almacena el valor del directorio donde queremos almacenar el fichero. Darse cuenta que fileName ( nombre del fichero ) esta añadido al final de la cadena. De este modo hemos dispuesto el camino a un nuevo directorio que llamamos 'uploaded' y que reside bajo la carpeta donde Loader.asp, Insert.htm, Insert.asp y otros ficheros están presentes.

Después usamos la función Loader.saveToFile para guardar los datos binarios en forma de fichero. Es importante saber que el primer argumento del método saveToFile es el nombre del tag Input que utilizamos en la pagina 'Insert.htm', y el segundo argumento es el camino completo con el nombre del fichero deseado, al directorio donde queremos almacenar este nuevo fichero. La función saveToFile devuelve un valor booleano, True si el fichero ha sido correctamente enviado y false si ha habido error.

Show.asp

Para terminar, crearemos una pagina mediante la cual mostraremos la lista de todos los ficheros que se encuentran en la carpeta "uploaded" , es decir , los ficheros que han sido enviados.

<%
	' -- show.asp --
	' Muestra la lista de los ficheros Uploaded
	
	Response.Buffer = True
%>
<html>
<head>
	<title>List of uploaded Files</title>
	<style>
		body, input, td { font-family:verdana,arial; font-size:10pt; }
	</style>
</head>
<body>
	<p align="center">
		<b>List of uploaded Files</b><br>
		<a href="insert.htm">To upload files click here</a>
	</p>

<%
	' File System Object
	Dim fso
		Set fso = Server.CreateObject("Scripting.FileSystemObject")
		
	' "Uploaded" Folder
	Dim folder
		Set folder = fso.GetFolder(Server.MapPath("uploaded/"))
		
	If folder.Size > 0 Then
		Response.Write "<ul>"
		For Each file In folder.Files
				Response.Write "<li type=""circle"">"
				Response.Write "<a href=""uploaded/"
				Response.Write file.Name & """>"
				Response.Write "<b>" & file.Name
				Response.Write "</b></a>   "
				Response.Write "( Size: " & file.Size & " )   "
		Next
		Response.Write "</ul>"
	Else
		Response.Write "<ul><li type=""circle"">No Files Uploaded.</ul>"
	End If
%>
</body>
</html>

 

 

 

¿Estas empezando y este articulo es muy complejo para tí?
Empieza por el principio, visita Ejemplos Básicos

Puedes obtener un listado completo de todos los artículos y ejemplos de ASP en http://www.asptutor.com/asp/todoslosarticulos.asp
 

Valora este articulo   Malo Excelente  
423 usuarios han valorado este articulo. Valoracion media:

Nota: Para cualquier consulta u opinión sobre este articulo puedes usar los foros

 

 

AspTutor lo hacemos entre todos ¿Como vas a colaborar hoy?


Google

 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar