ASP.NET MVC下载图像而不是在浏览器中显示

时间:2010-06-09 16:07:50

标签: c# asp.net-mvc image download controller

我不想在浏览器窗口中显示PNG,而是希望操作结果触发文件下载对话框(你知道打开,另存为等)。我可以使用未知的内容类型来使用下面的代码,但是用户必须在文件名的末尾键入.png。如何在不强制用户输入文件扩展名的情况下完成此行为?

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

解决方案....

    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;
    }

6 个答案:

答案 0 :(得分:42)

我相信您可以使用content-disposition标头来控制它。

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

答案 1 :(得分:9)

您需要在响应中设置以下标题:

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

答案 2 :(得分:5)

我实际上来到这里是因为我正在寻找相反的效果。

    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");
    }

答案 3 :(得分:3)

使用MVC,我使用FileResult并返回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);
    }

答案 4 :(得分:1)

这我实际上是@ 7072k3

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

从我的工作代码复制。 这仍然使用标准的ActionResult返回类型。

答案 5 :(得分:1)

在您的情况下下载文件的正确方法是使用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;
}