如何使用Breeze从数据库中获取图像?

时间:2013-12-14 03:50:45

标签: knockout.js breeze

我们将图像存储在SQL Server数据库中,我使用HotTowel的模板(感谢John Papa) 我的模型是这样的:

 public class Product
{
    public int Id { get; set; }
    public string ProductName{ get; set; }
    [DataType("image")]
    public Byte[] ImageData { get; set; }
}

我使用Breeze Api控制器:

public IQueryable<Product> Products()
    {
        return _contextProvider.Context.Products;
    }

客户代码:

var getProductPartials = function (productObservable)
{
 var query = EntityQuery.from('Products')
            .select('id, productName,imageData')
             .take(10);

        return manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);

        function querySucceeded(data) {
            var list = partialMapper.mapDtosToEntities(
                manager, data.results, entityNames.product, 'id');
            if (productObservable) {
                productObservable(list);
            }
            log('Retrieved [Products] from remote data source',
                data, true);
        }
}

问题是我无法将图像数据绑定到UI。

查看元数据:

"Id":1,"ProductName":"Product A","ImageData":{"$type":"System.Byte[],   mscorlib","$value":"/9j/4AAQSkZJRgABAQEAYABgAAD/4SOMRXhpZgAASUkqA etc...

调试显示没有来自(e.results)的图像数据:

imageData: Object 
__proto__: Object

我做错了什么?

1 个答案:

答案 0 :(得分:2)

自从我发布这个问题以来已经过去了四个月,直到我在这个问题上进行更多测试为止。

Ironic部分,我设法通过忽略投影查询将图像数据绑定到UI:

将客户端代码修改为:

var getProductPartials = function (productObservable){
var query = EntityQuery.from('Products').take(10);
       // .select('id, productName,imageData'); Removing this solved the proplem

    return manager.executeQuery(query)
        .then(querySucceeded)
        .fail(queryFailed);

    function querySucceeded(data) {
      //  var list = partialMapper.mapDtosToEntities(
        //    manager, data.results, entityNames.product, 'id');
        if (productObservable) productObservable(data.results);

        log('Retrieved [Products] from remote data source',
            data, true);
    }

}

然后绑定:

<img data-bind="attr: { src: 'data:image/png;base64,' + imageData() }" /> 

出于某种原因,在进行投影查询时不会显示图像数据。

我希望能帮助处于同样情况的人。