Важное обновление: я обнаружил, что У меня нет такой проблемы на Apple Mac! Только на Windows 7 !
Один и тот же файл PDF был загружен дважды. Один файл я могу открыть, второй - я не могу открыть. Может быть, кто-нибудь может дать мне какой-нибудь совет или узнать решение? Спасибо!
Я использую библиотеку fetch-node для загрузки бинарных файлов в Electron.js. Когда файлы маленькие, проблем нет, но с большими файлами я периодически вижу (не постоянно) проблему с декодированием файлов. Я не могу открыть такие файлы! Также я обнаружил, что некоторые файлы имеют размер 5 КБ, но должны иметь размер 10 МБ +!
function fastFetch(url, dest, fileName, callback) {
console.log("fastFetch-------------------------------------------------------");
//import fetch from 'node-fetch';
fetch(url)
.then(res => res.buffer())
.then(buffer => {
const settings = {
flags: 'w',
encoding: null, //not applicable / no changes
mode: 0o666
};
try {
fs.writeFileSync(dest, buffer, settings);
let msgOK = {
filename: fileName,
status: 'OK',
text: `File downloaded successfully`
}
if (callback) callback(msgOK);
console.log(msgOK.text);
isLoading = false; //IMPORTANT!
} catch (err) {
console.error(err.stack || err.message);
let msgErr = {
filename: fileName,
status: 'ERROR',
text: `Error in file downloading ${err.message}`
}
ERRORS.push(err);
if (callback) callback(msgErr);
}
})
}
Версия с WriteStream - та же проблема - один файл может быть открыт, другой не может быть открыт из-за проблемы с кодировкой:
function fetchWithFIleStream(url, dest, fileName, callback) {
console.log("fetch With FIle Stream-------------------------------------------------------");
//import fetch from 'node-fetch';
fetch(url)
.then(res => {
console.log("--------------------------------------------")
//console.log(res);
console.log(res.ok);
console.log(res.status);
console.log(res.statusText);
console.log(res.headers.raw());
console.log(res.headers.get('content-type'));
console.log("--------------------------------------------")
//ERROR: Not a function: res.setEncoding('binary');
return res.buffer();
})
.then(buffer => {
const settings = {
flags: 'w',
encoding: null, //default: 'utf8',
fd: null,
mode: 0o666,
autoClose: true
};
// response.pipe(fs.createWriteStream(dest, settings));
var wstream = fs.createWriteStream(dest, settings);
wstream.write(buffer);
wstream.on('finish', function () {
//console.log('END------------------------------------------------------')
let msgOK = {
filename: fileName,
status: 'OK',
text: `File downloaded successfully`
}
if (callback) callback(msgOK);
console.log(msgOK.text);
isLoading = false; //IMPORTANT!
wstream.end();
});
wstream.end();
})
}