1

我正在使用 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);
4

2 回答 2

1

来自如何使用 base64 编码方法在 IE 中建立链接的答案?:

据此,不能在 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 ]
于 2013-08-12T14:49:25.327 回答
-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,而不是图像,但同样的想法应该有效。

于 2013-08-12T15:30:21.370 回答