将 Document.getFileAsync 数据转换为 FormData 用于 Office 文件上传

Posted

技术标签:

【中文标题】将 Document.getFileAsync 数据转换为 FormData 用于 Office 文件上传【英文标题】:Convert Document.getFileAsync data to FormData for Office file uploading 【发布时间】:2018-11-26 02:39:41 【问题描述】:

我正在处理 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,但没有成功。

【问题讨论】:

@CindyMeister 我正在开发 Office JS API 我已添加该标签,以便合适的人更有可能看到您的问题。 这有帮助吗? docs.microsoft.com/en-us/office/dev/add-ins/word/… 【参考方案1】:

答案有点晚了,但希望能帮助未来寻找这个问题的人 - 我浪费了一些时间来解决这个问题。

Document.getFileAsync 返回的文件对象不能与 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);

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于将 Document.getFileAsync 数据转换为 FormData 用于 Office 文件上传的主要内容,如果未能解决你的问题,请参考以下文章

DP专题:划分数问题

用C语言将16进制数转化为10进制数 16进制数以字符串形式输入 最好运用数组 谢谢

划分数系列问题

将十六进制数转换为十进制数

将一个罗马数转化成对应的阿拉伯数

给定一个十进制数M,以及需要转换的进制数N。 将十进制数M转化为N进制数