将Document.getFileAsync数据转换为FormData以进行Office文件上载

时间:2018-06-16 15:42:17

标签: visual-studio ms-office office-js excel-addins word-addins

我正在使用Office加载项项目,我需要获取当前的Office文件并上传到我们的服务器。 以下是从文件浏览器上传到我们服务器的文件

var fdata = new FormData();
fdata.append('data', file);
fdata.append('totalFileSizeBytes', file.size);
fdata.boundary = '----boundary';

xhr.send(fdata);

我通过函数获取了Office文件信息:Document.getFileAsync(https://dev.office.com/reference/add-ins/shared/document.getfileasync

但我不知道如何将文件信息从Document.getFileAsync转换为FormData。 我尝试逐片读取文件信息然后连接到一个数组并传递给FormData,但它没有成功。

2 个答案:

答案 0 :(得分:1)

新的 File() 给了我一个错误。但是一个新的 Blob() 成功了

var aFile = new Blob(
    [new Uint8Array(docdata)],
    { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }
);

formData.append('file', aFile, 'testfile.docx');

答案 1 :(得分:0)

答案有点晚了,但是希望对将来的人们有所帮助-我浪费了一些时间来弄清楚这个问题。

Document.getFileAsync返回的File对象不能与FormData一起使用。另外,Microsoft文档显示的内容还没有为您提供一个可以放入FormData的文件。

首先,您必须按照Microsoft示例所示(https://docs.microsoft.com/en-us/javascript/api/office/office.document?view=office-js#getfileasync-filetype--options--callback-)组合返回到docdata数组的切片。但是,除了使用charCodeAt来创建字符串之外,您只需使用组合的docdata数组并执行以下操作:

const file = new File([new Uint8Array(docdata)], 'testfile.docx', { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' });

然后您可以继续将其追加到FormData:

const fd = new FormData();
fd.append('file', file);