Как добавить изображение в отчет 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
- Воила, это работает... или, по крайней мере, это сработало для меня.
Ответ 2
Пробовали ли вы использовать полный путь?
http://<servername>/images/image1.jpg
Дополнительная информация
Ответ 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".
Надеюсь, что это поможет