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