Проблема:
Мне нужно скачать PDF-файл с моего сервера, но я получаю сообщение «Нет файла» или пустой файл
Подробности:
Вот мой код на стороне сервера:
let fileBuffered = '';
// authentication for downloading a file from Dropbox API to my server
const dropbox = dropboxV2Api.authenticate({
token: process.env.DEV_DROPBOX_SECRET_KEY
});
// configuring parameters
const params = Object.freeze({
resource: "files/download",
parameters: {
path: `/${customerFileFolder}/${fileName}`
}
});
let dropboxPromise = new Promise(function (resolve, reject) {
dropbox(params, function (err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
}).on('data',function(data) {
fileBuffered += data;
})
const file = fileBuffered;
res.setHeader("Content-Type", "application/octet-stream");
res.send(file);
Размер файла PDF, который я пытаюсь загрузить, составляет 139 694 байта. Длина переменной fileBuffered - 132 597. Вот содержимое переменной, показанное в отладчике: Похоже на файл git PDF-файл
Вот клиентская сторона
function documentFileDownload(fileName) {
const ip = location.host;
let request = $.ajax({
type: "POST",
url: `${http() + ip}/documentFileDownload`,
headers: {
"Accept": "application/octet-stream"
},
data: {
fileName: fileName
},
error: function (err) {
console.log("ERROR: " + err);
}
});
console.log(request);
return request;
}
Проблема: Затем я получаю ответ на стороне клиента, он выглядит следующим образом:
Обратите внимание на размер текста ответа: 254Кб. На самом деле я получаю в браузере сообщение «Ошибка - нет файла»
Что еще я пробовал:
Я попытался поиграть с различными типами содержимого (application / pdf, text / pdf) на стороне сервера и попытался преобразовать переменную в буфер base64
const file = `data:application/pdf;base64, ${Buffer.from(fileBuffered).toString("base64")}`;
и добавил res.setHeader("Accept-Encoding", "base64");
но все равно получаю тот же результат.
Есть идеи?