Asp.net в C# открыть в формате JPEG/изображения из GridView в новой вкладке браузера
У меня есть GridView, в котором перечислены имя файла, тип документа и уникальный номер актива. Вы выбираете актив, а затем тип документа, который фильтрует список GridView, чтобы включить только те записи, которые относятся к этому конкретному активу и, например, фотографии. При выборе пункта открыть файл это откроет PDF-файлы в окне браузера. Это прекрасно работает с PDF-файлами, но когда я пытаюсь открыть, скажем, файл JPEG с измененным кодом, он просто загружает файл.
Вы можете изменить настройки своего браузера, чтобы открыть файл, но я не могу все наши пользователи, чтобы сделать это.
Я перепробовал все решения, которые я могу найти, но единственная альтернатива, которая работает до сих пор, использует панель в asp.net, что совсем не то, чего хотят пользователи.
Что я уже пробовал:
protected void grdAttachment_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "ViewFile") { string fileName = Server.MapPath("~/Attachment/" + e.CommandArgument.ToString()); string extension = fileName.Substring(fileName.Length - 3); if (extension != "pdf") { WebClient client = new WebClient(); byte[] byteArray = File.ReadAllBytes(fileName); string base64 = Convert.ToBase64String(byteArray); string.Format("data:image/jpg;base64,{0}", base64); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("Content-Type", "application/Photos"); HttpContext.Current.Response.AddHeader("Content- Disposition", "inline; filename=" + fileName); HttpContext.Current.Response.BinaryWrite(byteArray); HttpContext.Current.Response.End(); } else // WORKS!! { //string path = Path.Combine(Server.MapPath("~/Attachment/"), fileName); WebClient client = new WebClient(); Byte[] buffer = client.DownloadData(fileName); HttpContext.Current.Response.Clear(); HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf"); HttpContext.Current.Response.AddHeader("Content- Disposition", "inline; filename=" + fileName); HttpContext.Current.Response.BinaryWrite(buffer); HttpContext.Current.Response.End(); } } }
Maciej Los
Попробуйте установить: Content-Type = "image/jp2";
вместо "application/photos"
.
Кстати: "приложение/Фотографии" не существует! Здесь перечислены все типы носителей: https://www.iana.org/assignments/media-types/media-types.xhtml#application[^]
Member 14572699
Спасибо Мацей, но я боюсь, что это не сработает.
Maciej Los
А вы пробовали?
ZurdoDev
Вы не можете перезаписать настройки браузера. Итак, что вы хотите, чтобы мы сделали?
Member 14572699
Спасибо - откройте файл JPEG в браузере, не изменяя настроек браузера и не открывая PDF-файл так же, как я открываю JPEG в графическом окне внутри панели в VS 2019. На данный момент я использую оба метода, как вы можете видеть из кода. В противном случае, если это невозможно сделать, есть ли альтернатива. Я не хочу путать пользователей с двумя разными методами. Что Касается Джима
ZurdoDev
Есть только 2 способа заставить jpg открыться в браузере, которые я могу придумать. Либо с помощью тега img, чтобы html загружал изображение, либо установив приложение по умолчанию для jpgs в вашей системе, чтобы оно открывалось с помощью браузера.