如何使用动态网址将图像添加到SSRS报告中?

时间:2009-12-02 16:58:04

标签: reportingservices-2005 reporting-services

我正在尝试将图片添加到报告中。图像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控件。

更新

我能够使用绝对路径(http://server/path/to/http/handler)在报表设计器(VS 2005)中显示图像。但它们没有显示在Report Manager网站上。我甚至设置了Unattended Execution Account,可以访问外部网址。

4 个答案:

答案 0 :(得分:4)

我有一份SSRS报告,显示我们在工作中支持的网站用户所在国家/地区的信息。这基于IIS日志数据。在此报告中,表格的第一列是一个图像字段,其中包含每个国家/地区的小标志.gif。我遇到了上述问题中描述的相同问题。根据国家/地区代码在报告查询中计算外部图像的路径。我最初将URL设置为指向美国国旗的http://www.mystaticcontent.com/fotwimg/us.gif等等。我得到的只是报告中显示的红色X破碎图像。然后我发现this MSDN article为我解决了这个问题。

这就是我对报告所做的工作:

  1. 将包含所有GIF的fotwimg文件夹从静态内容服务器移动到本地SSRS计算机上,该计算机上还运行了一个Web服务器。
  2. 在本地SSRS计算机IIS管理器中的默认网站上设置虚拟目录。
  3. 然后我更改了报表查询以按机器名称引用本地SSRS计算机中的图像,如http://mylocalssrsmachine/fotwimg/us.gif
  4. Voila,它有效......或者至少它对我有用。

答案 1 :(得分:2)

您是否尝试过使用完全合格的路径?

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

More Info

答案 2 :(得分:2)

我也有这个问题..

我查看了SSRS错误日志和IIS服务器日志。一些调查结果:

  1. 带有静态图像URL的外部图像。 (例如http://intranet/site/logo.jpg
  2. 我可以为静态图片网址添加参数,但仍然有效。 (例如http://intranet/site/logo.jpg?foo=1)将忽略该参数,并显示图像。这表明SSRS并没有窒息?。
  3. 如果我将外部图片链接到返回没有参数的报告的ASPX页面(例如http://intranet/site/image.aspx),它仍然无效。
  4. IIS日志显示请求映像的报表服务器,并获得200 OK响应。
  5. 报告服务器日志显示:

      

    webserver!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(字符串   virtualPathWithPathInfo,String physicalPath,HttpResponse response)
      在System.Web.StaticFileHandler.ProcessRequestInternal(HttpContext   上下文)   System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context,   AsyncCallback回调,对象状态)   System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   在System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,   布尔和放大器; completedSynchronously)

  6.      我想知道SSRS是否正在做一些像保存文件之前添加“正确”文件扩展名的东西?

    即。类似于(1)SSRS下载/Page.aspx,它提供Content-Type:image / jpg的图像; (2)SSRS将其保存到临时文件夹,文件名如tempname.aspx.jpg; (3)SSRS查找tempname.aspx以将图像合并到报告中; (4)错误

    我想你可以通过在代码隐藏中处理.jpg请求来测试这个...不幸的是,这超出了我的ASPX技能。

答案 3 :(得分:0)

我的情况:根据产品代码从localhost加载。

  

Image.Source =“http:// LOCALHOST / IMG /”+ Fields!CODE.value +“.jpg”

问题:有时上传的文件扩展名为“.png”;因此需要进行FileExists验证。

解决方案: 1)添加辅助表

  

PRODUCT_PHOTO_EXTENSION

     
    

id(FK引用PRODUCT)     extension(varchar)

  

2)创建商店程序。在sql上执行FileExists验证并存储在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”。

希望有所帮助