Ответ 1
Я считаю, что вы можете контролировать это с помощью заголовка content-disposition.
Response.AddHeader(
"Content-Disposition", "attachment; filename=\"filenamehere.png\"");
Вместо того, чтобы отображать 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;
}
Я считаю, что вы можете контролировать это с помощью заголовка content-disposition.
Response.AddHeader(
"Content-Disposition", "attachment; filename=\"filenamehere.png\"");
Вам нужно установить следующие заголовки ответа:
Content-Disposition: attachment; filename="myfile.png"
Content-Type: application/force-download
Я действительно пришел сюда, потому что искал противоположный эффект.
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");
}
С 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);
}
Это я на самом деле @7072k3
var result = File(path, mimeType, fileName);
Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", "inline");
return result;
Скопировано это из моего рабочего кода. Он по-прежнему использует стандартный возвращаемый тип ActionResult.
Правильный способ загрузки файла в ваш случай - использовать класс 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;
}