por Cesar Cassiano Schimanco

Forçar download de arquivo via URL - ASP.NET / C#

Neste artigo vou utilizar um arquivo de imagem como exemplo, onde o comportamento normal de um browser é exibi-la ao acessar sua URL. Pois algumas vezes o que precisamos é fazer o download de um arquivo e não que ele seja simplesmente exibido. Então como avisar o browser que ele deve fazer o download e não simplesmente exibir?

Simples,  basta utilizar o código abaixo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class jpg : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Informa ao browser que é um anexo pelo cabeçalho
        //em filename adicione o nome que quer que apareça para o usuário
        Response.AddHeader("Content-Disposition", "attachment; filename=\"imagem.jpg\"");
        //Retornar a imagem
        Response.WriteFile(MapPath("~/imagem.jpg"));
    }
}

 

Exemplo 2, utilizando MemoryStream para retornar imagem

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class jpg : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Carregando a imagem utilizando o MapPath para pegar a imagem na raiz do site
        using (Bitmap image = new Bitmap(MapPath("~/imagem.jpg")))
        {
            using (MemoryStream ms = new MemoryStream())
            {
                //Informa ao browser que é um anexo pelo cabeçalho
                //em filename adicione o nome que quer que apareça para o usuário
                Response.AddHeader("Content-Disposition", "attachment; filename=imagem.jpg");
                //Informa o tamanho do arquivo
                Response.AddHeader("Content-Length", ms.Length.ToString());
                //Salva a imagem no MemoryStream
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                //Retorna a imagem
                ms.WriteTo(Response.OutputStream);
            }
        }
    }
}

 

Forçar exibição de arquivo no browser (inline)
Esta dica é para quem quer evitar o download automático do arquivo e forçar sua abertura no browser.

Response.AddHeader("content-disposition", "inline;filename=imagem.jpg");
//tipo de documento
Response.ContentType = "image/JPEG";

 

ContentType comuns:

  • text/html
  • text/xml
  • text/css
  • text/csv
  • image/gif
  • image/jpeg
  • text/plain
  • application/pdf
  • Application/msword (Word)
  • Application/x-msexcel (Microsoft Excel)
  • application/x-zip-compressed (ZIP)

 

 

Resumo:

Neste artigo vimos como fazer download automático de um arquivo ao acessar sua URL e no final do artigo uma dica de como forçar sua abertura no browser e evitar o download automático do arquivo.

Comentários

Carregando comentários

Postar um novo comentário



Processando...