Как отобразить изображение, расположенное на другом сервере в сети (ASP.NET)

У меня есть сайт ASP.NET, расположенный на локальном сервере (MY_SERVER). И одна из вещей, которые он делает, это извлечение файлов tiff, которые расположены на другом сервере (ANOTHER_SERVER). Расположение каждого из этих файлов хранится в SQL. Я подтягиваю каждое из этих изображений и должен отображать их. Проблема в:

  1. файлы не имеют расширения tiff (это важно?)

  2. они вообще не отображаются.

Я использую элемент управления Image для отображения этих изображений, и я не уверен, имеет ли значение, что расширение не установлено (знает ли элемент управления изображением разницу между jpg и tiff без расширения?)

Я предполагаю, что изображения не отображаются, потому что они не находятся на том же сервере MY_SERVER, на котором расположены изображения (ANOTHER_SERVER). Любые идеи о том, как это исправить?

edit: на самом деле отображение файлов tiff было удивительно простым:

protected void Page_Load(object sender, EventArgs e)
{
    Response.ContentType = "image/png";
    new Bitmap(Request.QueryString["ImagePath"]).Save(Response.OutputStream, ImageFormat.Gif);

}

но поскольку изображения расположены на ANOTHER_SERVER, я все еще не могу получить к ним доступ. Я могу просто сделать хак, скопировав их в локальный каталог на MY_SERVER, но должен быть простой способ исправить это. Кто угодно?


person eviljack    schedule 13.04.2010    source источник
comment
Если "ImagePath" является UNC, ваш пример кода должен работать. Если это не так, похоже, что веб-сервер работает от имени пользователя, который не может получить доступ к UNC. Вы можете убедиться в этом, используя File.Exists("ImagePath"). Кроме того, ваш пример кода читает только первый кадр каждого TIFF. Это все одностраничные файлы?   -  person flipdoubt    schedule 14.04.2010


Ответы (3)


Доступны ли изображения на ANOTHER_SERVER через HTTP или вы пытаетесь отобразить их в теге img, используя их путь UNC?

Поскольку веб-страницы просматриваются на клиентских машинах, пути к ресурсам (изображения/css/скрипты и т. д.) должны быть доступны с клиентской машины. Даже если они доступны с сервера, если они недоступны с клиента, они не будут доступны для просмотра.

Я подозреваю, что в этом случае MY_SERVER может получить доступ к размолвкам на ANOTHER_SERVER, однако путь к ANOTHER_SERVER ничего не значит для клиента, обращающегося к странице.

Вам нужно будет либо прочитать изображение с диска и отобразить его как изображение с помощью обработчика клиента, либо предоставить изображения на ANOTHER_SERVER через HTTP и ссылаться на них таким образом (что означает, что клиент должен иметь возможность напрямую подключаться к ANOTHER_SERVER) .

person Michael Shimmins    schedule 13.04.2010
comment
они недоступны по HTTP, и да, я пытаюсь отобразить их по пути UNC. - person eviljack; 14.04.2010
comment
именно так, путь к образу ничего не значил для клиента. Однажды я исправил, что это работает. - person eviljack; 28.04.2010

  1. Независимо от того, какой тег вы используете, ANOTHER_SERVER хранит изображения в доступном в Интернете месте? Если нет, вы не можете обслуживать их напрямую в Интернете. Вы можете попробовать загрузить файл с помощью Response.WriteFile.
  2. Тег <img /> не предназначен для обслуживания файлов TIFF. Плагин QuickTime — это бесплатная программа для просмотра TIFF, но она не очень гибкая. Там, где я работаю, мы используем dotImage от Atalasoft, который преобразует файлы TIFF в мозаичный PNG на летать, но это не бесплатно. Я нашел эту статью CodeProject. Даже если вы можете преобразовать изображение в веб-формат, ваш серверный код может кэшировать файл на веб-сервере.
person flipdoubt    schedule 13.04.2010

Вы должны иметь возможность отображать изображение с другого сервера, если ваш тег img src правильно настроен и сервер доступен. Однако я не верю, что большинство браузеров поддерживают прямой просмотр файлов TIFF. Доступно несколько программ просмотра TIFF (погуглите).

Вы также можете попробовать тег <embed> и посмотреть, работает ли он (смотрите здесь). Компьютер пользователя должен знать, как работать с TIFF.

person Ray    schedule 13.04.2010
comment
Вау, я не знал о теге embed. Кажется, он отлично работает в Safari на Mac. Что он делает для многостраничных TIFF? - person flipdoubt; 14.04.2010
comment
извините - я достиг предела своих знаний tiff :) - я предполагаю, что вам нужен плагин для просмотра tiff, чтобы делать что-нибудь необычное - person Ray; 14.04.2010