tutorial net mvc mostrar imagen from entre diferencias control asp c# asp.net-mvc image download controller

net - web forms c#



Imagen de descarga de ASP.NET MVC en lugar de mostrar en el navegador (6)

Con MVC utilizo FileResult y devuelvo FilePathResult

public FileResult ImageDownload(int id) { var image = context.Images.Find(id); var imgPath = Server.MapPath(image.FilePath); return File(imgPath, "image/jpeg", image.FileName); }

En lugar de mostrar un PNG en la ventana del navegador, me gustaría que el resultado de la acción active el cuadro de diálogo de descarga del archivo (ya sabes, abrir, guardar como, etc.). Puedo hacer que esto funcione con el siguiente código utilizando un tipo de contenido desconocido, pero el usuario tiene que escribir .png al final del nombre del archivo. ¿Cómo puedo lograr este comportamiento sin forzar al usuario a escribir la extensión del archivo?

public ActionResult DownloadAdTemplate(string pathCode) { var imgPath = Server.MapPath(service.GetTemplatePath(pathCode)); return base.File(imgPath, "application/unknown"); }

Solución....

public ActionResult DownloadAdTemplate(string pathCode) { var imgPath = Server.MapPath(service.GetTemplatePath(pathCode)); Response.AddHeader("Content-Disposition", "attachment;filename=DealerAdTemplate.png"); Response.WriteFile(imgPath); Response.End(); return null; }


Creo que puedes controlar esto con el encabezado de disposición de contenido.

Response.AddHeader( "Content-Disposition", "attachment; filename=/"filenamehere.png/"");


Debe establecer los siguientes encabezados en la respuesta:

  • Content-Disposition: attachment; filename="myfile.png"
  • Content-Type: application/force-download

En realidad vine aquí porque estaba buscando el efecto contrario.

public ActionResult ViewFile() { string contentType = "Image/jpeg"; byte[] data = this.FileServer("FileLocation"); if (data == null) { return this.Content("No picture for this program."); } return File(data, contentType, img + ".jpg"); }


Esto en realidad yo @ 7072k3

var result = File(path, mimeType, fileName); Response.ContentType = mimeType; Response.AddHeader("Content-Disposition", "inline"); return result;

Copié eso de mi código de trabajo. Esto todavía usa el tipo de devolución estándar ActionResult.


La forma correcta de descargar el archivo en su caso es usar la clase FileResult .

public FileResult DownloadFile(string id) { try { byte[] imageBytes = ANY IMAGE SOURCE (PNG) MemoryStream ms = new MemoryStream(imageBytes); var image = System.Drawing.Image.FromStream(ms); image.Save(ms, System.Drawing.Imaging.ImageFormat.Png); var fileName = string.Format("{0}.png", "ANY GENERIC FILE NAME"); return File(ms.ToArray(), "image/png", fileName); } catch (Exception) { } return null; }