如何在Javascript中将byte [] / Memory流绑定到image src属性

时间:2015-04-13 05:10:26

标签: javascript c# ajax asp.net-mvc asp.net-mvc-4

我有一个ActionMethod可以返回图像的Memorystream或byte []。在ajax上调用此操作方法。现在我想将此图像绑定到图像标记src属性。

public ActionResult GetBpChart(string Timespan)
    {
        var ObjMemoryStream = new MemoryStream();
        try
        {
            ObjMemoryStream = MyModel.GetImage(Timespan);
        }
        catch (Exception Ex)
        {

        }
        //return Content(Convert.ToBase64String(ObjMemoryStream.GetBuffer()));
        //return Json(ObjMemoryStream.GetBuffer());
        return File(ObjMemoryStream.GetBuffer(), "image/jpeg");
    }

function GetChart() {
try {
    $.ajax({
        type: 'POST',
        url: "myActionMethodurl",
        data: {
            Timespan: $('#ddlBpTimespan').val()
        },
        success: function (ImgSrc) {
            // For Base64String
            //$('#divBpChart').innerHTML = '<img src= "data:image/jpeg;base64," ' + ImgSrc + '"/>';
            // For Json of byte[]
            //$('#divBpChart').innerHTML = '<img src= "data:image/gif;base64," ' + ImgSrc + '"/>';
            // For FileContentResult
            $('#imgBpChart').attr('src', ImgSrc);
            HideAjaxProgress();
        }
    });

} catch (E) {
} 
}

我尝试了以上3种组合。但没有运气。有人可以说我在这里缺少什么,或者说实现这个目标的正确方法是什么

1 个答案:

答案 0 :(得分:2)

通过阅读.ajax()文档,我会说简单的答案是&#34; 不,你不能这样做。&#34;

幸运的是,你不需要。只需创建相关网址并更新目标图片的src属性:

即可
function GetChart() {
    try {
        var ImgSrc = '/mycontroller/myActionMethodurl?timespan=' + $('#ddlBpTimespan').val();
        $('#imgBpChart').attr('src', ImgSrc);
    } catch (error) {
    } 
}

如果您在View中对此进行编码,则可以利用UrlHelper来帮助构建正确的&#34; base&#34;网址:

function GetChart() {
    try {
        var ImgSrc = '@Url.Action("myActionMethodurl", "mycontroller")?timespan=' + $('#ddlBpTimespan').val();
        $('#imgBpChart').attr('src', ImgSrc);
    } catch (error) {
    } 
}

也许是更好的选择?

对于似乎有用的纯JavaScript方法,请参阅Using jQuery's ajax method to retrieve images as a blob