Member 14572699 Ответов: 1

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 в вашей системе, чтобы оно открывалось с помощью браузера.

1 Ответов

Рейтинг:
1

Suresh_Vishwakarma

Этот простой код сделает волшебство.

if (extension != "pdf")
       {
           string script = " <script type=\"text/javascript\">  window.open('./Attachment/" + e.CommandArgument.ToString() + "');   </script> ";
           ScriptManager.RegisterStartupScript(this, typeof(Page), "alert", script, false);
       }