从网上找到了该方面的代码,现在出现了一些问题。          var fileUrl = "${pdfUrl}";
          //定义全局变量
          var DEFAULT_URL ; 
          var path = "${resourcesPath}";
          
          $(document).ready(function(){
             $.ajax({
                type:"post",
                async: false,
                contentType:"application/pdf;charset=utf-8", 
                url:fileUrl,
                success:function(data){
                    var pdfAsDataUri = data;
                    var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
                    DEFAULT_URL  = pdfAsArray;
                }
            });
          });
function convertDataURIToBinary(dataURI) {
          var rawLength = dataURI.length;
          var array = new Uint8Array(new ArrayBuffer(rawLength));  
          for(i = 0; i < rawLength; i++) {
            array[i] = dataURI.charCodeAt(i) & 0xff;  
          }
          return array;
     }
使用pdf流的方式返回后,最终DEFAULT_URL  是Uint8Array方式的数组,然后到viewer.js中
var queryString = document.location.search.substring(1);
  var params = parseQueryString(queryString);
  var file = 'file' in params ? params.file : DEFAULT_URL;
在这个文件中全文就这么一个DEFAULT_URL,最后file肯定就等于这个数组了
然后,
if (file && file.lastIndexOf('file:', 0) === 0) {
    // file:-scheme. Load the contents in the main thread because QtWebKit
    // cannot load file:-URLs in a Web Worker. file:-URLs are usually loaded
    // very quickly, so there is no need to set up progress event listeners.
    PDFViewerApplication.setTitleUsingUrl(file);
    var xhr = new XMLHttpRequest();
    xhr.onload = function() {
      PDFViewerApplication.open(new Uint8Array(xhr.response), 0);
    };
    try {
      xhr.open('GET', file);
      xhr.responseType = 'arraybuffer';
      xhr.send();
    } catch (e) {
      PDFViewerApplication.error(mozL10n.get('loading_error', null,
        'An error occurred while loading the PDF.'), e);
    }
    return;
  }
if判断明显都过不去...最后Uncaught (in promise) TypeError: file.lastIndexOf is not a function而结束..
大神们怎么解决..

解决方案 »

  1.   

    使用的是读取pdf文件流的方式
     大神呢,,,下班了么。
      

  2.   

    说明你那个file对象没有lastIndexOf方法罗,自己alert(file);alert(file&&file.lastIndexOf)看输出什么东东
      

  3.   

    这个viewer.js中就是这么定义的,之前这个file是接收路径的,现在需要接收数据流转化的Uint8Array格式才行,用过这个东西的大神们,怎么改...
      

  4.   

    这个viewer.js中就是这么定义的,之前这个file是接收路径的,现在需要接收数据流转化的Uint8Array格式才行,用过这个东西的大神们,怎么改...你干嘛要自己用ajax请求一次fileUrl?你要加载指定的文件直接传递文件路径就行了,注意是相对于当前页面的如你加载pdf.js的html为test.html,那么你要加载同目录下的pdf直接
    test.html?file=xxxx.pdf就行了,上级目录的就test.html?file=../xxxx.pdf你这个问题是因为你的ajax请求是dom ready在加载的,而if判断在dom ready前就执行了,你没有给DEFAULT_URL赋值,那么是undefined,你调用lastIndexOf肯定报错了去掉 $(document).ready(function(){这层代码,并且你的第一段代码要放到viewer.js上,并且去掉viewer.js中
    var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf';
    这句,要不重新赋值就不是你ajax请求到的内容了
      

  5.   

    问题不是在这里,dom ready这块我可以改一下去掉
    因为pdf在文件服务器上,我不能直接读取路径,所以Ajax去后台读取的文件流信息返回前台,
    viewer.js现在是在最后放置的,里边的DEFAULT_URL 定义我也删除掉了。
    现在的情况是我的DEFAULT_URL 就是一串Uint8Array格式的数组,
    所以根据viewer.js中的var file = 'file' in params ? params.file : DEFAULT_URL;这句话,
    这个file就是数组串,然后肯定是过不了file.lastIndexOf('file:', 0) === 0这句话的..
      

  6.   

    问题不是在这里,dom ready这块我可以改一下去掉
    因为pdf在文件服务器上,我不能直接读取路径,所以Ajax去后台读取的文件流信息返回前台,
    viewer.js现在是在最后放置的,里边的DEFAULT_URL 定义我也删除掉了。
    现在的情况是我的DEFAULT_URL 就是一串Uint8Array格式的数组,
    所以根据viewer.js中的var file = 'file' in params ? params.file : DEFAULT_URL;这句话,
    这个file就是数组串,然后肯定是过不了file.lastIndexOf('file:', 0) === 0这句话的..
    ╮(╯▽╰)╭。。你先搞清楚路径问题吧,你路径还没搞清楚。。你只需要配置file参数,插件会帮你自动加载服务器的路径文件,不需要你自己加载
      

  7.   

    题主做好了吗?我也得用pdf.js读取服务器上的文件 , 想用流的方式读取,但是没成功,file后面拼路径都好使就是读取文件流不行
      

  8.   

    楼主,好了吗  我的是可以的谷歌火狐等浏览器下预览pdf,但是就是在ie下报错!