Как добавить изображение в отчет SSRS с динамическим URL? - PullRequest
15 голосов
/ 02 декабря 2009

Я пытаюсь добавить изображение в отчет. URL-адрес изображения - это IHttpHandler , который принимает несколько параметров строки запроса. Вот пример:

<img src="Image.ashx?item=1234567890&lot=asdf&width=50" alt=""/>

Я добавил Изображение в ячейку и затем установил Источник на Внешнее и Значение на следующее выражение:

="Image.ashx?item="+Fields!ItemID.Value+"&lot="+Fields!LotID.Value+"&width=50"

Но когда я просматриваю отчет, он отображает изображение html как:

<IMG SRC="" />

Чего мне не хватает?

Обновление

Даже если я установлю значение на «image.jpg», он все равно будет отображать пустой атрибут src. Я не уверен, имеет ли это значение, но я использую это с элементом управления ReportViewer VS 2008 в режиме удаленной обработки.

Обновление

Мне удалось получить изображения для отображения в конструкторе отчетов (VS 2005) с абсолютным путем (http://server/path/to/http/handler)., но они не отображались на веб-сайте диспетчера отчетов. Я даже настроил Учетная запись автоматического выполнения , которая имеет доступ к внешним URL-адресам.

Ответы [ 4 ]

4 голосов
/ 26 марта 2010

У меня есть отчет SSRS, который отображает информацию о странах пользователей сайта, которые мы поддерживаем на работе. Это основано на данных журнала IIS. В этом отчете в первом столбце таблицы находится поле изображения, содержащее небольшой GIF-файл флага для каждой страны. Я столкнулся с той же самой проблемой, описанной в вопросе выше. Путь к внешнему изображению был рассчитан в запросе отчета на основе кода страны. Сначала я настроил URL-адрес, чтобы он указывал на что-то вроде http://www.mystaticcontent.com/fotwimg/us.gif для флага США и так далее. Все, что я получил, было красным X разбитым изображением, отображаемым в отчете. Затем я нашел эту статью MSDN , которая пролила некоторый свет на эту проблему для меня.

Вот что я сделал с отчетом, чтобы он работал:

  1. Перемещена папка fotwimg со всеми gif-файлами со статического сервера содержимого на локальную машину SSRS, на которой также работает веб-сервер.
  2. Настройка виртуального каталога на веб-сайте по умолчанию на локальном компьютере с SSRS IIS Manager.
  3. Затем я изменил запрос отчета, чтобы он ссылался на изображение на локальной машине SSRS по имени машины, например http://mylocalssrsmachine/fotwimg/us.gif
  4. Вуаля, это работает ... или, по крайней мере, это сработало для меня.
2 голосов
/ 09 января 2012

У меня тоже есть эта проблема ..

Я просмотрел журналы ошибок SSRS и журналы сервера IIS. Некоторые выводы:

  1. Работают внешние изображения с URL-адресами статических изображений. (например, http://intranet/site/logo.jpg)
  2. Я могу добавить параметры в URL статических изображений, и это все еще работает. (Например, http://intranet/site/logo.jpg?foo=1) Параметр будет проигнорирован, и отобразится изображение. Это говорит о том, что SSRS не задыхается от?.
  3. Если я связываю внешнее изображение со страницей ASPX, которая возвращает отчет без параметров (например, http://intranet/site/image.aspx),, он все равно не работает.
  4. Журналы IIS показывают сервер отчетов, запрашивающий образ и получающий ответ 200 OK.
  5. Журналы сервера отчетов показывают это:

    веб-сервер! ReportServer_0-116! 14cc! 01/09 / 2012-12: 20: 29 :: i INFO: Обработанный отчет. Report = '/ Path / ReportName', Stream = '' ui! ReportManager_0-115! 7b8! 01/09 / 2012-12: 20: 29 :: Необработанное исключение: System.Web.HttpException: файл не существует. в System.Web.StaticFileHandler.GetFileInfo (String virtualPathWithPathInfo, String PhysicalPath, HttpResponse response)
    в System.Web.StaticFileHandler.ProcessRequestInternal (HttpContext контекст) в System.Web.DefaultHttpHandler.BeginProcessRequest (контекст HttpContext, Обратный вызов AsyncCallback, состояние объекта) в System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () на System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, Boolean и выполняется синхронно)

Интересно, SSRS делает что-то неумное, как добавление «правильного» расширения файла перед сохранением файла?

т.е. что-то вроде (1) SSRS загружает /Page.aspx, который предоставляет изображение с Content-Type: image / jpg; (2) SSRS сохраняет это во временную папку с именем файла, например tempname.aspx.jpg; (3) SSRS ищет файл tempname.aspx для включения изображения в отчет; (4) Ошибка

Полагаю, вы могли бы проверить это, обрабатывая запросы .jpg в программном коде ... К сожалению, на данный момент это выходит за рамки моих навыков ASPX.

2 голосов
/ 03 декабря 2009

Вы пытались использовать полный путь?

http://<servername>/images/image1.jpg

Подробнее

0 голосов
/ 23 апреля 2013

Мой случай: загрузка с локального хоста в зависимости от кода продукта.

Image.Source = "http://LOCALHOST/IMG/" + Поля! CODE.value +" .jpg "

Проблема: иногда файл загружается с расширением ".png"; поэтому необходима проверка FileExists.

Решение: 1) Добавить вспомогательную таблицу

PRODUCT_PHOTO_EXTENSION

id (FK ссылки ПРОДУКТ) расширение (varchar)

2) Создать процедуру хранения. Выполните проверку FileExists в SQL и сохраните расширение, найденное в PRODUCT_PHOTO_EXTENSION.extension:

insert into PRODUCT_PHOTO_EXTENSION 
SELECT A.id,'.JPG' FROM PRODUCT A LEFT JOIN PRODUCT_PHOTO_EXTENSION AF ON A.id=AF.id WHERE AF.id IS NULL AND Matriz is null and dbo.FileExists('D:\directory\' + code + '.jpg')=1
 insert into PRODUCT_PHOTO_EXTENSION 
SELECT A.id,'.PNG' FROM PRODUCT A LEFT JOIN PRODUCT_PHOTO_EXTENSION AF ON A.id=AF.id WHERE AF.id IS NULL AND Matriz is null and dbo.FileExists('D:\directory\' + code + '.jpg')=1

3) Загрузить файл изображения, используя это поле. (SSRS; image.source выражение)

Iif(Fields!EXTENSION.Value<>"", "http://LOCALHOST/IMG/" & Fields!CODE.Value & Fields!EXTENSION.Value, "" )

4) Результат: загрузить изображение в соответствии с его расширением; избегайте этого красного "х".

Надеюсь, это поможет

...