大型演示文稿文件的GetFileAsync会导致内存不足

时间:2017-08-14 06:05:45

标签: powerpoint office-js office-addins

我正在开发一个PowerPoint加载项,其功能是将演示文稿上传到Web服务器。我的演示文稿大小为100MB。我使用了在Office文档中使用GetFileAsync的指南。它适用于小型演示文件。但是当我选择很大的演示文件时,加载项消息没有响应。我确实突破了代码,我发现由于大数组切片,没有响应的原因是在js中。获取大文件的切片没有问题。但是当slice数组连接为一个数组时的问题。

此处的代码来自发生问题的Office文档。

function onGotAllSlices(docdataSlices) {
  var docdata = [];

  for (var i = 0; i < docdataSlices.length; i++) {
    docdata = docdata.concat(docdataSlices[i]);
  }

  var fileContent = new String();

  for (var j = 0; j < docdata.length; j++) {
    fileContent += String.fromCharCode(docdata[j]);
  }

  // Now all the file content is stored in 'fileContent' variable,
  // you can do something with it, such as print, fax...
}

我不知道Office Add-in是否是错误或问题。我希望有人帮助我。

提前致谢。

更新

我简化了这样的给定函数:

function onGotAllSlices(docdataSlices) {

  var fileContent = new String();

  for(var i = 0; i < docdataSlices.length; i++) {
    var docdata = docdataSlides[i];

    for(var j = 0; j < docdata.length; j++) {
      fileContent += String.fromCharCode(docdata[j]);
    }
  }

  var base64String = window.btoa(fileContent);
}

到目前为止,没有“内存不足”的问题。问题。但是还有另一个问题是&#39; 8007000e的错误信息。 “没有足够的存储空间可以完成此操作”&#39;当fileContent转换为base64String时。

1 个答案:

答案 0 :(得分:0)

这看起来像是一个性能问题。你检查过How to extend an existing JavaScript array with another array, without creating a new array?了吗? .concat将根据您之前重新分配的前两个数组创建一个新数组。或许还有更好的方法吗?