下载文件选择器仅在关闭node.js之后出现

时间:2018-11-14 19:42:53

标签: html node.js download anchor

我有一个非常简单的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>

结果文件从运行节点的位置写入目录结构(“转换后的目录”位于运行节点的目录中)。 当我单击上面的href时,我得到控制台输出,但没有文件保存对话框。 (服务器甚至应该收到此事件吗?) 当我杀死节点服务器时,向上弹出文件保存对话框。当然保存失败:网络错误。 我目前正在工作站上运行所有程序: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);

0 个答案:

没有答案