无法使用XMLHttpRequest读取大型pdf文件

时间:2016-06-21 13:57:03

标签: javascript php ajax pdf xmlhttprequest

我有简单的XMLHttpRequest到php服务器脚本。

    fxhr.onload = function (data) {
    //console.log(JSON.parse(data.target.response));
    var string = JSON.parse(data.target.response).data.content;
    console.log(JSON.parse(data.target.response));
    DEFAULT_URL = convertDataURIToBinary(string);

    var config = getViewerConfiguration();
    window.PDFViewerApplication = pdfjsWebLibs.pdfjsWebApp.PDFViewerApplication;
    pdfjsWebLibs.pdfjsWebApp.PDFViewerApplication.run(config);
  };
  fxhr.open('POST', window.location.pathname + 'content');

服务器脚本代码:

      public function execute()
{
  $productModel = new shopProductModel();
  $bookModel = new shopEbooksPluginItemModel();
  $item = $productModel->getByField('url', waRequest::param('product_code'));
  $bookFile = $bookModel->getByField(array(
   'product_id' => $item['id'],
   'book_type'  => waRequest::param('reader_state')
  ), false);
  $content = @file_get_contents($this->getBookFullPath($bookFile));

  $this->response = array('content' => $this->getBaseEncodedFile());
}

private function getBookFullPath($bookFileRow)
{
  return $bookFileRow['file_path'] . $bookFileRow['file_name'];
}

private function getBaseEncodedFile($content)
{
  return 'data:application/pdf;base64,' . base64_encode($content);
}

如果我尝试阅读小pdf文件,它的工作正常,但如果我尝试阅读40mb pdf文件服务器响应只有"数据:application / pdf; base64,"。 file_exists返回true。

1 个答案:

答案 0 :(得分:0)

PHP在php.ini文件中有几个可能导致问题的设置。

memory_limit - 这几乎肯定是问题所在; PHP必须将所有数据加载到内存中才能进行处理。尝试将此值增加到比您希望处理的最大文件大50%的值。

max_execution_time - 如果脚本需要很长时间来处理所有数据,它将被终止。尝试增加此值。

我经常不得不在php.ini中修改这些限制,以允许脚本处理大量数据。