Файлы 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);
});