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

Mục*_*ồng 3 ms-office visual-studio excel-addins word-addins office-js

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

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

xhr.send(fdata);
Run Code Online (Sandbox Code Playgroud)

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

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

小智 6

答案有点晚了,但希望可以帮助未来寻找这个的人 - 我浪费了一些时间试图弄清楚这一点。

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

首先,您必须docdata按照 Microsoft 示例所示组合返回到数组的切片(https://learn.microsoft.com/en-us/javascript/api/office/office.document?view=office-js #getfileasync-文件类型--选项--回调- )。但是,您不需要使用创建字符串charCodeAt,而是只需使用组合docdata数组并执行以下操作:

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

然后您可以将其附加到您的 FormData 中:

const fd = new FormData();
fd.append('file', file);
Run Code Online (Sandbox Code Playgroud)