如何在IE中使用base64 pdf字符串(base64 pdf字符串来自odata调用)

时间:2013-08-12 14:29:14

标签: jquery knockout.js kendo-ui odata

我正在使用Knockout Kendo数据绑定从后端获取base64 pdf字符串,我正在尝试在Object标记中显示base64字符串并嵌入标记以在所有浏览器中显示,但它在IE中不起作用。任何人都可以帮我在IE中显示base64 pdf url字符串。语法:

this.pdfData = ko.computed(function () {
            var pData = this.pData();

            if (pdata) {
                // get pdf data here

                var bob =  'data:application/pdf;base64,' + service.standard.call.payslipPdf.get(payslip).Ev_pdf;
                return bob;
                //debugger;
            }
            return '';

        }, this);

2 个答案:

答案 0 :(得分:1)

来自How can I make a link in IE using base64 encoding method?的答案:

  

根据this,您无法在IE中使用数据uri进行导航。

     
      
  • Internet Explorer到版本7(截至2011年9月约占网络流量的5%),缺乏支持。但是,这可以通过提供特定于浏览器的内容来克服。 [6]
  •   
  • Internet Explorer 8将数据URI限制为最大长度32 KB。 (Internet Explorer 9没有此限制) [4] [3]
  •   
  • 在IE 8和9中,数据URI只能用于图像,但不能用于导航或Javascript生成的文件下载。 [7]
  •   

答案 1 :(得分:-1)

一种可能性,不完全是一个干净的解决方案,是在服务器上构建一些接受base-64请求并将其转换为图像响应的东西。

如果它足够小,你可以在一个大调用中完成所有操作,只需构建一个img标记,如:

<img src="MyHandler.ashx?img=784571348589235824...9875290347589243">

但是如果它太大,你会遇到URL限制的问题。您还可以将base-64临时存储在服务器上并对其进行调用,假设您的服务器可以处理它。例如,使用ASP.NET MVC:

[HttpPost]
public ActionResult GetImageKey(string base64) {
    var key = Guid.NewGuid();
    HttpContext.Cache.Add(key.ToString(), Convert.FromBase64String(base64), null,
        DateTime.Now.AddSeconds(30), Cache.NoSlidingExpiration, CacheItemPriority.Normal,
        null);
    return Json(new { imageKey = key.ToString() });
}

public ActionResult GetImage(string imageKey) {
    return File((byte[])HttpContext.Cache[imageKey], "image/png");
}

function go() {
    jQuery.ajax({
        url: "/Home/GetImageKey",
        type: "post",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: "{'base64':'iVBORw...FNmlZSxpODv+wRj1j56bJnOiwAAAABJRU5ErkJggg=='}",
            success: function (result) {
                jQuery("#img-result").attr("src", "/Home/GetImage?imageKey=" + result.imageKey);
        }
    });
}

编辑刚刚注意到问题是针对PDF,而不是图片,但同样的想法应该有效。