为什么ReportViewer映像到Azure Blob Image会导致空源?

时间:2014-03-06 22:05:11

标签: asp.net reportviewer

我已将一些图像上传到Azure blob存储(sample),需要从ReportViewer引用。

现在,我有一个图像控件绑定到一个stured过程的结果,该过程根据某些条件列出了几个图像。 SP正在输出正确的图像列表(示例链接是其中之一)但是我从图像控件获得的是一个空块包装带有空src的img。

即使我将示例图像链接硬连接到图像控件而不是将其绑定到查询结果,行为仍然存在(唯一的区别是我现在在Visual Studio预览中获得了正确的图像)。

我已尝试禁用所有代理,将默认代理中的azure blob域列入白名单但未成功。

现在我的应用程序正在我的开发机器上运行。

更新: 将示例链接硬连线到图像控件现在以某种方式工作,但我仍面临主要问题:将图像控件数据绑定到sp生成的值会导致空src。将图像源设置为外部,将图像设置为[RValues]仍然无效。 (将文本控件设置为[RValues]将输出指向正确图像的有效绝对URL,因此我怀疑这是问题)

更新2:图像在PDF导出中显示为红色x

3 个答案:

答案 0 :(得分:0)

您的问题与Windows Azure无关。

要将外部图像引用到报告中,您需要做一些事情。首先,您必须在报表查看器控件中启用外部图像:

ReportViewer1.LocalReport.EnableExternalImages = True

您还需要将来源设置为external。最后但并非最不重要的是确保reportviewer httpHandler已正确注册到web.config。

有关详细信息,请查看relevant question heredocumentation here

答案 1 :(得分:0)

如果您使用Azure Storage SDK上传blob,则可能未指定内容类型。默认情况下,Azure Storage会为其分配application/octet-stream,并在您通过URL访问文件时使用此内容类型为其提供服务。 ReportViewer不能很好地处理那样的外部图像。

因此,在上传图片时,请务必指定blob的ContentType属性。

var blockBlob = container.GetBlockBlobReference("your-image.jpg");
blockBlob.Properties.ContentType = "image/jpeg";
await blockBlob.UploadFromStreamAsync(stream);

答案 2 :(得分:0)

public async Task SaveFile(byte[] bytes, string feature, string fileName, string tenant)
    {
        CloudBlobDirectory blobDirectory = GetImageStorage(tenant, feature);

        CloudBlockBlob blockBlob = blobDirectory.GetBlockBlobReference(fileName);
        blockBlob.Properties.ContentType = "image/jpeg";

        using (var ms = new MemoryStream(bytes))
        {
            await blockBlob.UploadFromStreamAsync(ms);
        }
    }