Tbs.User Ответов: 3

Как я могу отобразить любой файл формата в веб-браузере


У меня есть один ActionUrl в приложении в том, что он содержит адрес файлов всех форматов.

Теперь по клику любого файла он должен быть открыт в браузере(не скачиваться)

Я попробовал ниже код для него, но он работает только для формата pdf.

Что я уже пробовал:

public FileContentResult ViewFile(string filename)
{
   string OnlyFileName = Path.GetFileName(filename);
   string ext = Path.GetExtension(filename);

   var mimeType = "application/pdf";

   if (ext.ToLower() == ".png")
   {
      mimeType = "image/png";
   }
   else if (ext.ToLower() == ".docx")
   {
      mimeType = "application/ms-word";
   }
//

   var fileContents = System.IO.File.ReadAllBytes(filename);

   return new FileContentResult(fileContents, mimeType);
}

F-ES Sitecore

Для работы с "любым файлом" вы можете определить тип MIME из расширения, запросив реестр. Есть пример кода этого в одном из ответов здесь https://stackoverflow.com/questions/1029740/get-mime-type-from-filename-extension

Однако, как уже упоминалось в решениях здесь, отправка правильного типа MIME-это все, что вы можете сделать, затем браузер должен решить, что делать с этим типом, если он может показать встроенный файл, то он это сделает, в противном случае он запустит приложение, зарегистрированное для этого файла, или, если таковой не найден, даст вам возможность загрузки.

Tbs.User

Да, спасибо за это. теперь я получаю mimeType из filename, но мне все равно нужно его открыть.

3 Ответов

Рейтинг:
2

Kornfeld Eliyahu Peter

Вы не можете...
Даже если у вас есть приложение для отображения любого возможного формата файла, и даже все эти приложения должным образом зарегистрированы в вашем браузере, и даже все эти приложения имеют плагин для отображения файлов внутри браузера, пользователь все равно может исключить эту опцию и принудительно загрузить... Вспомни! Это его / ее владения!


Рейтинг:
2

Ravi Kumhar

Пожалуйста, попробуйте это

[HttpPost]
  public ActionResult ViewPDF()
  {
      string embed = "<object data=\"{0}\" type=\"application/pdf\" width=\"500px\" height=\"300px\">";
      embed += "If you are unable to view file, you can download from <a href = \"{0}\">here</a>";
      embed += " or download <a target = \"_blank\" href = \"http://get.adobe.com/reader/\">Adobe PDF Reader</a> to view the file.";
      embed += "</object>";
      TempData["Embed"] = string.Format(embed, VirtualPathUtility.ToAbsolute("~/Files/Mudassar_Khan.pdf"));

      return RedirectToAction("Index");
  }


Tbs.User

Привет Рави,
Спасибо за ответ, но я сказал, что хочу открыть любой тип файла в браузере.
с моим кодом я уже могу открывать pdf и png файлы в браузере, но не могу открывать файлы Word с помощью этого.

Рейтинг:
15

Patrice T

Цитата:
Теперь по клику любого файла он должен быть открыт в браузере(не скачиваться)

Это невозможно.
Все, что отображается на экране клиента, должно быть загружено в первую очередь, несмотря ни на что.
И после загрузки вы не можете запретить пользователю сохранять файл.
Цитата:
с моим кодом я уже могу открывать pdf и png файлы в браузере, но не могу открывать файлы Word с помощью этого.

Ваш код не делает никакой магии, любой браузер знает, как отображать png и pdf с помощью плагина. И ни один браузер не знает, как отобразить файл word, потому что для него нет плагина.

Для того чтобы отобразить любой формат файла, не поддерживаемый браузером, у вас есть 2 vhoices:
- на стороне браузера напишите плагин для отображения этого формата файла.
- на стороне сервера напишите переводчик, который преобразует файл в известный браузеру формат, например html.


Tbs.User

В то время как если я создам плагин для отображения формата файла, то он будет работать только для моего браузера.

И если я пытаюсь преобразовать word в html или pdf на стороне сервера, я должен сначала установить MSWord на сервере. в противном случае это даст ошибку, не так ли?

Patrice T

Точно так же, как и для PDF-файла, вам придется распространять свой плагин среди всех ваших клиентов.
Будьте бдительны, файлы MSWord не сделал, чтобы быть установлен на сервере, и вы будете иметь проблемы, когда вы будете пытаться иметь больше, чем 1 файлы MSWord открыть одновременно.

Tbs.User

Так что нет никакого безопасного способа сделать это, верно?

Patrice T

Для MSWord самый простой способ-сохранить файл в формате html.