Файлы Excel, загруженные в Dropbox с помощью Node.js SDK, недействительны.

Я пытаюсь загрузить файлы Excel в Dropbox с помощью Node.js SDK (https://github.com/dropbox/dropbox-sdk-js). Файлы получены из JsReport и правильно сохраняются при сохранении на мой локальный диск. Однако при загрузке в Dropbox файлы превращаются в длинные строки вместо файлов Excel.

Тело в этом случае представляет собой строку, закодированную в base64. Имя файла speedtest_daily_2021-01-15_test26.xlsx.

Эта строка успешно записывает файл на мой локальный диск:

      fs.writeFileSync(*filename*, body, {encoding: 'base64'});

Это код, который я использую для загрузки файла в Dropbox:

      body = Buffer.from(body).toString('base64');

dbx.filesUpload({ contents: body, path: saveLocation + `/` + filename })
          .then((response: any) => {
            console.log(`Saved file "${filename}" to Dropbox folder ${saveLocation}`);
          }).catch((uploadErr: DropboxError<files.UploadError>) => {
          console.log(uploadErr);
        });

Вот как должен выглядеть файл Excel, и он выглядит на моем локальном компьютере:

Вот что происходит, когда я открываю файл Dropbox Excel:

Вот как выглядит файл Dropbox, когда я открываю его в текстовом редакторе:

Я пробовал различные комбинации кодировок для Dropbox, но ни одна из них не работает.

1 ответ

Догадаться. Что мне нужно было сделать, так это отправить буфер в filesUpload, а не закодированную строку.

      let buffer = Buffer.from(body, 'base64');
    dbx.filesUpload({ contents: buffer, path: saveLocation + `/` + filename })
      .then((response: any) => {
        console.log(`Saved file "${filename}" to Dropbox folder ${saveLocation}`);
      }).catch((uploadErr: DropboxError<files.UploadError>) => {
      console.log(uploadErr);
    });
Другие вопросы по тегам