Как при использовании Unity WebGL загрузить большой файл с сервера Ubuntu в экземпляр ec2?
Мне нужно загрузить большой файл (~5 ГБ) с сервера Ubuntu в экземпляре ec2 в Unity WebGl (веб-браузер).
На сервере Ubuntu я использую NodeJS, экспресс.
Я смог получить доступ к файлам на сервере через рестапи (веб-запрос единства) и успешно прочитать данные файла.
Но я не могу загрузить эти данные в файл на локальном клиенте (пользовательском ПК).
Я нашел, как скачать файл с такого сервера.
- Как работать с файлами с помощью потоков в Node.js: https://www.digitalocean.com/community/tutorials/how-to-work-with-files-using-streams-in-node-js
- Загрузите файл с сервера NodeJS с помощью Express : Загрузите файл с сервера NodeJS с помощью Express
- Загрузка и загрузка файлов в Node.js с использованием Multer: https://medium.com/geekculture/file-upload-and-download-in-node-js-c524a8050c8f
Все говорят, что можно использовать
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
или
res.download(file);
Итак, я написал код для загрузки следующим образом.
const doGetDownloadFile = (req, res, next) => {
var upload_folder = './uploads';
//var file = upload_folder + '/' + req.body.fileName;
var file = upload_folder + '/' + 'logs.txt';
try {
if (fs.existsSync(file)) { // 파일이 존재하는지 체크
var filename = path.basename(file); // 파일 경로에서 파일명(확장자포함)만 추출
var mimetype = mime.getType(filename); // 파일의 타입(형식)을 가져옴
console.log(filename, mimetype);
console.log(getDownloadFilename(req, filename));
// res.download(file);
res.setHeader('Content-Disposition', 'attachment; filename=' + getDownloadFilename(req, filename));
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
//filestream.on("data", () => process.stdout.write('.')).pipe(res);
var stat = fs.statSync(file);
var str = progress({
length: stat.size,
time: 100
});
str.on('progress', function(progress) {
console.log(progress.percentage);
});
filestream.pipe(str).pipe(res).on('error', (err) => {
console.log("Error Log In Server : ", err);
}).on('finish', ()=> {
console.log("Finish Log in Server");
})
} else {
res.send('해당 파일이 없습니다.');
return;
}
} catch (e) { // 에러 발생시
console.log(e);
res.send('파일을 다운로드하는 중에 에러가 발생하였습니다.');
return;
}
}
Этот код работает без ошибок, но есть проблема.
Процент загрузки файла увеличивается, но когда я смотрю на вкладку ответа в окне сети, там ничего нет, и в результате увеличивается только процент, а файл из браузера я фактически не скачиваю.
Я новичок в сети, поэтому многого не знаю. Что мне теперь делать?