У меня есть очень простое приложение node.js, которое успешно обрабатывает файл (из огромной формы), но загрузка файла результатов не удалась. Скачать HTML
<p><input type="text" value = "tx-AllSerums.xlsx"><br>
<a href="/transformed/tx-AllSerums.xlsx"
download="All Serums.xlsx">Download transformed file</a>
</p>
Файлы результатов записываются в структуру каталогов, из которой я запускаю узел («преобразованный» каталог находится в каталоге, в котором я запускаю узел).
Когда я нажимаю на вышеупомянутую ссылку, я получаю вывод консоли, но нет диалога сохранения файла. (Должен ли сервер даже получить это событие?)
Когда я убиваю сервер узла, появляется диалоговое окно сохранения файла. Конечно, сохранение не удается: ошибка сети.
В настоящее время я запускаю все на своей рабочей станции: Ubuntu 18.04; Chrome 70.0.3538.77, узел v10.13.0
Я обнаружил, что диалоговое окно сохранения файла появляется, но очень долго после щелчка. Но сервер все еще работает, и операция сохранения все еще не выполняется: ошибка сети.
Добавление res.end () к блоку, перехватывающему щелчок при загрузке, немедленно вызывает диалог. Теперь я успешно загружаю файл нулевой длины. Как ни странно, я нахожу это обнадеживающим.
var formidable = require('formidable');
var util = require("util");
var http = require('http');
var url = require('url');
var fs = require('fs');
var java = require("java");
var proc = require("process");
java.classpath.push("/home/u0138544/fake/prep-1.jar");
java.classpath.push("/home/u0138544/fake/SRTDependancies-1.jar");
console.log(proc.cwd());
http.createServer(function (req, res) {
txName = "";
if (req.url == '/fileupload' && req.method.toLowerCase() == 'post') {
var form = formidable.IncomingForm();
form.keepExtensions = true;
var excelFilePath;
var origName;
form.parse(req , function (err, fields, files) {
excelFilePath = files.filetoupload.path;
console.log("upload " + excelFilePath);
origName = files.filetoupload.name;
txName = "tx-" + origName.replace(/\s/g, "");
console.log( "txname = " + txName);
//just for formatter
var clz = "edu.utah.camplab.xlsx.SampleReportTransformer";
var tx = java.newInstanceSync(clz);
java.callMethodSync(tx, "run", excelFilePath, "./transformed/" + txName);
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<p>');
res.write('<input type="text" value = "' + txName +'"><br>');
res.write('<a href="transformed/' + txName + '" download="' + origName +'">Download transformed file</a></p>');
return res.end();
});
}
else if (req.url.includes('transformed') &&
req.method.toLowerCase() == 'get') {
console.log("download attribute doesn't work")
res.end();
}
else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
res.write('<input type="file" name="filetoupload" label="Pick a file"><br>');
res.write('<input type="submit">');
res.write('</form>');
return res.end();
}
}).listen(15080);