Como enviar archivos Binarios al Browser del Cliente en ASP.NET

Para este caso vamos a enviar una imagen jpg que se encuentra previamente en alguna carpeta que se tiene acceso desde el servidor. (revisar acceso de los usuarios anónimos IURS_nombreservidor,  IWAM_nombreservidor y ASP.NET).


 


Vamos a utilizar el objeto System.IO.Stream que nos estrega la funcionalidad de devolver archivos binarios.

 

Dim objStream As System.IO.Stream, _

    FileSize As LongobjStream = New FileStream(“c:\imagen.jpg”, FileMode.Open)

FileSize = objStream.Length


Dim Buffer(CInt(FileSize)) As Byte


objStream.Read(Buffer, 0, CInt(FileSize))

objStream.Close()

Response.AppendHeader(“content-disposition”, “attachment; filename=imagen.jpg”)


Response.BinaryWrite(Buffer)


Response.End

28 thoughts on “Como enviar archivos Binarios al Browser del Cliente en ASP.NET

  1. Hola !

    Estoy necesitando hacer lo mismo que Miguel y utilizando el ejemplo que

    plateas puedo hacer lo que necesito pero mi caso es dar opcion de guardar un

    file .txt que existe en el server, todo eso esta bien pero cuando reviso el

    archvio que usuario bajo veo la data que tenia el .txt original mas toda la

    pagina web que estaba viendo en ese momento, es como que toda la pagina en

    html tambien se agrega en el buffer.

    Me podrias ayudar a limpiar esto.

    saludos y gracias mil

  2. Hola,

    El motivo del porque te manda el código HTML en el archivo, es debido a que el ASPX contiene código HTML (obviamente) borra todo lo relacionado con HTML y deja solo la cabecera es decir solo esta línea:

    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="appFront.WebForm1"%>

    y nada más…

    Espero te sirva la ayuda.

    Saludos,

    Jhonny Vargas P.

  3. Hola, primero darte las gracias por tu blog y segundo preguntarte si este código serviría para descargar vídeos desde un servidor web. Es que estoy haciendo un servidor web en el que los clientes se pueden descargar diversos vídeos y no sé como implementar dicho código en C#.

    Muchas Gracias.

    antoniojvaillo@hotmail.com

  4. cómo puedo hacer para enviar varios ficheros al cliente y que éste le salga el dialog para cada uno de ellos? (si le envio un fichero no hay problema, pero con varios no puedo)

  5. Sirve este codigo para Visual Basic.net?? Necesito es enviar desde un cliente la imagen al servidor de imagenes. Pero… el cliente se comunica con un servicio web q es el q envia la imagen al servidor de imagenes. Los clientes no ven directamente al servidor de imagenes.

  6. Hermano: Necesito cargar imagenes de una base de datos en una tabla html y este código sólo me permite mostrar una imagen. Necesito ayuda urgente…
    Gracias

  7. Hola tengo una pagina en asp que recibe un stream y lo escribe en disco en el servidor:

    Set adoStream = Server.CreateObject(“ADODB.Stream”)
    adoStream.Mode = 3 ‘read write
    adoStream.open
    adoStream.Type = 1 ‘adTypeBinary
    adoStream.Write Request.BinaryRead(Request.TotalBytes)’escribe en el Stream los bytes enviados
    adoStream.Position = 0

    adoStream.SaveToFile filname, 1 ‘adSaveCreateNotExist’escribe en disco el stream

    ESO ES PARTE DEL CODIGO EN ASP

    ahora necesito enviarle el stream de datos desde C#:

    Hago lo siguiente:

    // Create a request using a URL that can receive a post.
    WebRequest request = WebRequest.Create(“https://miurl.com/SubeArchivo.asp?filename=NameFilToLoad.xml”);
    // Set the Method property of the request to POST.
    request.Method = “POST”;
    // Create POST data and convert it to a byte array.
    string postData = “This is a test that posts this string to a Web server.”;
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
    // Set the ContentType property of the WebRequest.
    request.ContentType = “application/x-www-form-urlencoded”;
    // Set the ContentLength property of the WebRequest.
    request.ContentLength = byteArray.Length;
    // Get the request stream.
    Stream dataStream = request.GetRequestStream();
    // Write the data to the request stream.
    dataStream.Write(byteArray, 0, byteArray.Length); //Write(byteArray, 0, byteArray.Length);
    dataStream.Flush();
    // Close the Stream object.
    dataStream.Close();
    // Get the response.
    WebResponse response = request.GetResponse();
    // Display the status.
    Console.WriteLine(((HttpWebResponse)response).StatusDescription);
    // Get the stream containing content returned by the server.
    dataStream = response.GetResponseStream();
    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader(dataStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd();
    // Display the content.
    Console.WriteLine(responseFromServer);
    // Clean up the streams.
    reader.Close();
    dataStream.Close();
    response.Close();

    Bueno mi problema es ese si alguien me puede ayudar le agradecer mucho.

  8. Saludos
    De antemano, felicidades por tu blog y toda la informacion valiosa que colocas en el. Mi duda es acerca de que estoy tratando de leer una variable que contiene una imagen codificada en Base64 y quiero decodificar esa texto para mostrarlo como image, sin embargo, tengo problemas con el FileStream. No se si podrias comentarme algo acerca de como decodificar codigo en Base64 en una imagen

    Saludos y gracias

  9. ¿Es posible mandar un archivo desde una aplicacion winform a una carpeta de un servidor web?

    La respuesta es si, puedes crear un servicio web que reciba tu archivo en Base64 y lo guarde en el servidor web…

  10. como puedo hacer para que en ves de una imagen sea un objeto excel , el que se mande al cliente. pero sin guardar el excel en el servidor :
    1.-gerar el libro por codigo
    2.-mandarselo al cliente.

    me pueden ayudar??? 🙁

  11. Hola de antemano muchas gracias por compartir estos conocimientos, en mi caso yo estoy haciendo una aplicacion web en asp.net, el servidor que contiene mi aplicacion web, tiene la imagen guardada en “C:\Inetpub\wwwroot\MyProyect” como puedo hacer para que desde el cliente yo pueda mostrar esa imagen….. Este es mi problema si alguien me puede ayudar se agradece mucho..

  12. Hola, muy buen blog, felicidades, tengo una preguntita, como puedo hacer para enviar varios archivos al cliente, de manera que el usuario al hacer click en el boton “descargar todos” se le guarden todos los archivos en una carpeta ya sea introducida por el o predeterminada

  13. Hola estoy desarrollando un proyecto en asp.net la idea es que reciba información por un puerto y este se almacene en una bd, la verdad he leido mucho acerca de sockets y creo que por ahi es la cosa. Quisiera saber si alguien me puede ayudar con algun ejemplo.
    mi correo es juankmiloo@gmail.com
    gracias

  14. Hola,

    Necesito en mi pagina que el usuario pueda enviar un archivo xml previamente creado como attachment, necesito presentar el link al archivo y al presionar se incluya en el attachment del email.

    No se como hacer esto – de que manera pudiera implantar esta solucion.

    Gracias

  15. Hola quisiera saber si a traves del envio de archivos binarios es posible enviarlo a un gridview,image o imagemap para mostrar la imagen en uno de esos controles, debido que al a utilizarlo siempre me sale en un nuevo form, utilizo la siguiente sentencia:
    bit.Save(Response.OutputStream, ImageFormat.Jpeg)

    Hay alguna forma?
    Lo utilzo en Asp.Net VB. 2.0
    Saludos. Ojala me puedas ayudar 🙁

  16. Hola, tengo una consulta, use tu codigo en un proyecto mio, pero al cambiar de imagen en el directorio original en mi servidor, en los clientes sigue saliendo la imagen antigua, es decir no reconoce la imagen nueva, y es como si estuviera cacheada la imagen antigua, puedes ayudarme?

  17. usando tu codigo, mi imagen queda cacheada, por mas que cambie de imagen siempre me sale la misma imagen, ya revise todo, reinicie IIS, AppPool, pc, etc y nada, sigue la imagen cacheada

Leave a Reply

Your email address will not be published. Required fields are marked *