Преобразование данных Document.getFileAsync в FormData для загрузки файлов Office

Я работаю над проектом надстройки 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, но это не увенчалось успехом.


person Mục Đồng    schedule 16.06.2018    source источник
comment
@CindyMeister Я работаю над Office JS API   -  person Mục Đồng    schedule 18.06.2018
comment
Я добавил этот тег, чтобы нужные люди с большей вероятностью увидели ваш вопрос.   -  person Cindy Meister    schedule 18.06.2018
comment
Это помогает? docs.microsoft.com/en-us/office/dev/add-ins/word/   -  person João Pimentel Ferreira    schedule 28.08.2020


Ответы (2)


Ответ немного запоздал, но, надеюсь, может помочь будущим людям, которые ищут это - я потратил некоторое время, пытаясь понять это.

Объект File, возвращаемый Document.getFileAsync, не может использоваться с FormData. Кроме того, то, что показывает документация Microsoft, не дает вам файла, который вы можете просто поместить в FormData.

Во-первых, вам нужно будет объединить фрагменты, возвращенные в массив docdata, как показано в примере Microsoft (https://docs.microsoft.com/en-us/javascript/api/office/office.document?view=office-js#getfileasync-filetype--options--callback-). Но тогда вместо того, чтобы создавать из него строку с помощью 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);
person Wingmen    schedule 08.03.2019
comment
Спасибо. Это действительно помогло мне... - person Leo; 13.05.2021

Новый File() дал мне ошибку. Но новый Blob() сделал свое дело

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

formData.append('file', aFile, 'testfile.docx');
person Forgeabc    schedule 23.07.2021