我正在开发一个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时。
答案 0 :(得分:0)
这看起来像是一个性能问题。你检查过How to extend an existing JavaScript array with another array, without creating a new array?了吗? .concat
将根据您之前重新分配的前两个数组创建一个新数组。或许还有更好的方法吗?