PDF通过ajax作为字节数组返回。获取ERR_INVALID_URL或空白pdf取决于参数

时间:2016-02-23 22:04:40

标签: ajax spring-mvc pdf google-chrome-extension base64

来自spring控制器的代码,它将字节数组(pdf)发送回ajax调用

    response.setHeader("Pragma", "no-cache");
    response.setHeader("Cache-control", "private");
    response.setDateHeader("Expires", 0);
    response.setContentType("application/pdf");;

    if (pdf != null) {
        response.setContentLength(pdf.length);
        ServletOutputStream out;
        try {
            out = response.getOutputStream();
            out.write(pdf);
            out.flush();
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

此pdf动态添加到稍后可以打开的对话框中。 "数据"包含字节数组

var obj = $('<object width=100% height=100% style="float:left;"'
                        + ' type="application/pdf"'
                        + ' data="data:application/pdf,'
                        + escape(data)
                        + '"></object>');  
                $('#adjDialog'+rapRow).append(obj);

结果是看起来pdf是使用chrome扩展转换的,但数据属性未正确设置。我在PDF查看器中看到一个空PDF,当我用开发人员工具检查它时,我可以找到这个标记(没有写这个,由chrome生成)

    <embed id="plugin" type="application/x-google-chrome-pdf" src="data:" 
stream-url="blob:chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/E4E5DEA1-
DDF5-4300-9C43-8634ED843E50" headers="" background-color="0xFF525659" top-
toolbar-height="56">

^数据是空的但我希望它应该是我提供的网址。

如果我添加&#34 ;; base64&#34;数据属性没有任何加载,我得到

GET data:application/pdf;base64,%25PDF-1.4%0A%25%uFFFD%uFFFD%uFFFD%uFFFD%0A1%20…431343532353232343430323633%3E%5D%3E%3E%0Astartxref%0A84512%0A%25%25EOF%0A net::ERR_INVALID_URL

我已经从堆栈溢出的几个不同的代码示例中获取提示,但似乎没有什么像我的。我没有使用任何PHP,没有使用数据库,而且我没有在服务器上保存文件

1 个答案:

答案 0 :(得分:0)

我通过将html属性“data”指向构建pdf响应的http请求而不是单独执行ajax调用并尝试修补结果来修复此问题。