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

C# ASP.NET MVC下载图像而不是在浏览器中显示,c#,asp.net-mvc,image,download,controller,C#,Asp.net Mvc,Image,Download,Controller,我不希望在浏览器窗口中显示PNG,而是希望操作结果触发文件下载对话框(您知道“打开”、“另存为”等)。我可以使用未知的内容类型来处理下面的代码,但是用户必须在文件名的末尾键入.png。如何在不强制用户键入文件扩展名的情况下实现此行为 public ActionResult DownloadAdTemplate(string pathCode) { var imgPath = Server.MapPath(service.GetTemplatePath(pathCo

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

    public ActionResult DownloadAdTemplate(string pathCode)
    {
        var imgPath = Server.MapPath(service.GetTemplatePath(pathCode));
        return base.File(imgPath, "application/unknown");
    }
解决方案
我相信您可以通过contentdispositionheader来控制这一点

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

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

  • 内容配置:附件;filename=“myfile.png”
  • 内容类型:应用程序/强制下载

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

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

这个我实际上是@7072k3

var result = File(path, mimeType, fileName);
Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", "inline");
return result;
从我的工作代码中复制的。 这仍然使用标准的ActionResult返回类型。

对于MVC,我使用a并返回a


在您的案例中,下载文件的正确方法是使用
FileResult
class

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

谢谢内容类型是强制下载文件所必需的。内容类型是一个很好的解决方案,内容处置也很有效,但是你可能会遇到一些风险,存在另一篇关于它的帖子嘿,我也是!事实证明,我们只需要删除文件名,使您的代码看起来像:returnfile(data,contentType)
public FileResult ImageDownload(int id)
    {
        var image = context.Images.Find(id);
        var imgPath = Server.MapPath(image.FilePath);
        return File(imgPath, "image/jpeg", image.FileName);
    }
 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;
}