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.