Как добавить изображение в отчет SSRS с динамическим URL-адресом?

Я пытаюсь добавить изображение в отчет. Изображение src 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. Я не уверен, что это имеет значение, но я использую это с VS 2008 ReportViewer в режиме удаленной обработки.

Обновление

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

Ответы

Ответ 1

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

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

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

Ответ 3

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

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

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

    webserver! ReportServer_0-116! 14cc! 01/09/2012-12: 20: 29:: я 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)
    в 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, Логическое & completedSynchronously)

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

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

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

Ответ 4

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

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

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

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

PRODUCT_PHOTO_EXTENSION

id (ссылки FK PRODUCT)   расширение (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) Результат: Загрузите изображение согласно его расширению; избегайте красного "x".

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